blob: e7e42bf8a31b3096aa8085ac398ddb0e5c583c53 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2018 Red Hat and others. All rights reserved.
* The contents of this file are made available under the terms
* of the GNU Lesser General Public License (LGPL) Version 2.1 that
* accompanies this distribution (lgpl-v21.txt). The LGPL is also
* available at http://www.gnu.org/licenses/lgpl.html. If the version
* of the LGPL at http://www.gnu.org is different to the version of
* the LGPL accompanying this distribution and there is any conflict
* between the two license versions, the terms of the LGPL accompanying
* this distribution shall govern.
*
* Contributors:
* Red Hat - initial API and implementation
*******************************************************************************/
#include <gtk/gtk.h>
typedef struct AppData {
GtkWidget *dynamic_label;
GtkWidget *text_entry;
} AppData;
static gboolean delete_event(GtkWidget*, GdkEvent*, gpointer);
static void set_text_cb(GtkWidget *button, gpointer data) {
GtkWidget *label = ((AppData *) data)->dynamic_label;
GtkWidget *text = ((AppData *) data)->text_entry;
gtk_label_set_text_with_mnemonic(GTK_LABEL(label),
gtk_entry_get_text(GTK_ENTRY(text)));
}
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *main_vbox, *box;
GtkWidget *toolbar;
GtkWidget *scroll_window;
GtkToolItem *item1, *item2, *item3, *dynamic_item;
GtkWidget *item1_label, *item2_label, *item3_label;
GtkWidget *set_text_button;
// GtkWidget *text_entry;
gtk_init(&argc, &argv);
AppData *app_data = g_new0(AppData, 1);
/* Top-Level Window */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "delete_event", G_CALLBACK(delete_event), NULL);
/* Box for packing */
main_vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(window), main_vbox);
/* Scroll window inside box */
scroll_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_min_content_height(
GTK_SCROLLED_WINDOW(scroll_window), 300);
gtk_box_pack_start(GTK_BOX(main_vbox), scroll_window, FALSE, FALSE, 0);
/* Box inside scroll window for packing */
box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(scroll_window), box);
/* Entry for setting text */
app_data->text_entry = gtk_entry_new();
gtk_box_pack_start(GTK_BOX(box), app_data->text_entry, FALSE, FALSE, 0);
/* Button for setting text */
set_text_button = gtk_button_new_with_label("Set Item Text");
gtk_box_pack_start(GTK_BOX(box), set_text_button, FALSE, FALSE, 0);
/* Toolbar */
toolbar = gtk_toolbar_new();
gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_TEXT);
item1 = gtk_tool_button_new(0, NULL);
item1_label = gtk_label_new_with_mnemonic("ITEM 1");
gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(item1), item1_label);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item1, -1);
item2 = gtk_tool_button_new(0, NULL);
item2_label = gtk_label_new_with_mnemonic("ITEM 2");
gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(item2), item2_label);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item2, -1);
item3 = gtk_tool_button_new(0, NULL);
item3_label = gtk_label_new_with_mnemonic("ITEM 3");
gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(item3), item3_label);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item3, -1);
dynamic_item = gtk_tool_button_new(0, NULL);
app_data->dynamic_label = gtk_label_new_with_mnemonic("DYNAMIC");
gtk_tool_button_set_label_widget(GTK_TOOL_BUTTON(dynamic_item),
app_data->dynamic_label);
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), dynamic_item, -1);
gtk_box_pack_start(GTK_BOX(box), toolbar, FALSE, FALSE, 0);
g_signal_connect(set_text_button, "clicked", G_CALLBACK(set_text_cb),
app_data);
gtk_window_set_default_size(GTK_WINDOW(window), 600, 500);
gtk_widget_show_all(window);
gtk_main();
return 0;
}
static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
gtk_main_quit();
return FALSE;
}