diff --git a/ChangeLog b/ChangeLog index 0655a76048..583f30d0f7 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 0655a76048..583f30d0f7 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,7 @@ +Wed Jun 28 13:31:55 BST 2000 Tony Gale + + * docs/faq/gtk-faq.sgml: Start of Section 6. + Mon Jun 26 19:37:04 2000 Owen Taylor * configure.in: Put 1.3.1 in warning message, not 1.3.0. diff --git a/docs/faq/gtk-faq.sgml b/docs/faq/gtk-faq.sgml index 9f0054c7b5..f2eb052187 100644 --- a/docs/faq/gtk-faq.sgml +++ b/docs/faq/gtk-faq.sgml @@ -2,7 +2,7 @@ - June 26th 2000 + June 28th 2000 GTK+ FAQ @@ -2091,6 +2091,414 @@ gint gtk_clist_prepend (GtkCList *clist, gdk_pixmap_unref (pixmap_mask); + + + + + + Development with GTK+: widget specific questions + + + + + + + How do I find out about the selection of a GtkList? + + Get the selection something like this: + + +GList *sel; +sel = GTK_LIST(list)->selection; + + + This is how GList is defined (quoting glist.h): + + +typedef struct _GList GList; + +struct _GList +{ + gpointer data; + GList *next; + GList *prev; +}; + + + A GList structure is just a simple structure for doubly + linked lists. there exist several g_list_*() functions to + modify a linked list in glib.h. However the + GTK_LIST(MyGtkList)->selection is maintained by the + gtk_list_*() functions and should not be modified. + + + The selection_mode of the GtkList determines the + selection facilities of a GtkList and therefore the contents + of GTK_LIST(AnyGtkList)->selection: + + + + + selection_mode + GTK_LIST()->selection + contents + + + + + GTK_SELECTION_SINGLE + selection is either NULL or contains a GList* + pointer for a single selected item. + + + GTK_SELECTION_BROWSE + selection is NULL if the list contains no + widgets, otherwise it contains a GList* + pointer for one GList structure. + + + GTK_SELECTION_MULTIPLE + selection is NULL if no listitems are selected + or a a GList* pointer for the first selected + item. that in turn points to a GList structure + for the second selected item and so + on. + + + GTK_SELECTION_EXTENDED + selection is NULL. + + + + + + The data field of the GList structure + GTK_LIST(MyGtkList)->selection points to the first + GtkListItem that is selected. So if you would like to + determine which listitems are selected you should go like + this: + + +{ + gchar *list_items[]={ + "Item0", + "Item1", + "foo", + "last Item", + }; + guint nlist_items=sizeof(list_items)/sizeof(list_items[0]); + GtkWidget *list_item; + guint i; + + list=gtk_list_new(); + gtk_list_set_selection_mode(GTK_LIST(list), GTK_SELECTION_MULTIPLE); + gtk_container_add(GTK_CONTAINER(AnyGtkContainer), list); + gtk_widget_show (list); + + for (i = 0; i < nlist_items; i++) + { + list_item=gtk_list_item_new_with_label(list_items[i]); + gtk_object_set_user_data(GTK_OBJECT(list_item), (gpointer)i); + gtk_container_add(GTK_CONTAINER(list), list_item); + gtk_widget_show(list_item); + } +} + + + To get known about the selection: + + +{ + GList *items; + + items=GTK_LIST(list)->selection; + + printf("Selected Items: "); + while (items) { + if (GTK_IS_LIST_ITEM(items->data)) + printf("%d ", (guint) + gtk_object_get_user_data(items->data)); + items=items->next; + } + printf("\n"); +} + + + + + + + + How do I stop the column headings of a GtkCList + disappearing when the list is scrolled? + + This happens when a GtkCList is packed into a + GtkScrolledWindow using the function + gtk_scroll_window_add_with_viewport(). The prefered + method of adding a CList to a scrolled window is to use the + function gtk_container_add, as in: + + + GtkWidget *scrolled, *clist; + char *titles[] = { "Title1" , "Title2" }; + + scrolled = gtk_scrolled_window_new(NULL, NULL); + + clist = gtk_clist_new_with_titles(2, titles); + gtk_container_add(GTK_CONTAINER(scrolled), clist); + + + + + + + + I don't want the user of my applications to enter text + into a GtkCombo. Any idea? + + A GtkCombo has an associated entry which can be accessed + using the following expression: + + + GTK_COMBO(combo_widget)->entry + + + If you don't want the user to be able to modify the + content of this entry, you can use the + gtk_entry_set_editable() function: + + + + void gtk_entry_set_editable(GtkEntry *entry, + gboolean editable); + + + Set the editable parameter to FALSE to disable typing + into the entry. + + + + + + How do I catch a combo box change? + + The entry which is associated to your GtkCombo send a + "changed" signal when: + + + some text is typed in + + the selection of the combo box is changed + + + + To catch any combo box change, simply connect your + signal handler with + + + gtk_signal_connect(GTK_COMBO(cb)->entry, + "changed", + GTK_SIGNAL_FUNC(my_cb_change_handler), + NULL); + + + + + + + How can I define a separation line in a menu? + + See the Tutorial for + information on how to create menus. However, to create a + separation line in a menu, just insert an empty menu item: + + +menuitem = gtk_menu_item_new(); +gtk_menu_append(GTK_MENU(menu), menuitem); +gtk_widget_show(menuitem); + + + + + + + + How can I right justify a menu, such as Help? + + Depending on if you use the MenuFactory or not, there + are two ways to proceed. With the MenuFactory, use something + like the following: + + +menu_path = gtk_menu_factory_find (factory, "<MyApp>/Help"); +gtk_menu_item_right_justify(menu_path->widget); + + + If you do not use the MenuFactory, you should simply + use: + + + +gtk_menu_item_right_justify(my_menu_item); + + + + + + + + How do I add some underlined accelerators to menu + items? + + Damon Chaplin, the technical force behind the Glade + project, provided the following code sample (this code is an + output from Glade). It creates a small File menu item + with only one child (New). The F in File and the N + in New are underlined, and the relevant accelerators are + created. + + + menubar1 = gtk_menu_bar_new (); + gtk_object_set_data (GTK_OBJECT (window1), "menubar1", menubar1); + gtk_widget_show (menubar1); + gtk_box_pack_start (GTK_BOX (vbox1), menubar1, FALSE, FALSE, 0); + + file1 = gtk_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (file1)->child), + _("_File")); + gtk_widget_add_accelerator (file1, "activate_item", accel_group, + tmp_key, GDK_MOD1_MASK, 0); + gtk_object_set_data (GTK_OBJECT (window1), "file1", file1); + gtk_widget_show (file1); + gtk_container_add (GTK_CONTAINER (menubar1), file1); + + file1_menu = gtk_menu_new (); + file1_menu_accels = gtk_menu_ensure_uline_accel_group (GTK_MENU (file1_menu)); + gtk_object_set_data (GTK_OBJECT (window1), "file1_menu", file1_menu); + gtk_menu_item_set_submenu (GTK_MENU_ITEM (file1), file1_menu); + + new1 = gtk_menu_item_new_with_label (""); + tmp_key = gtk_label_parse_uline (GTK_LABEL (GTK_BIN (new1)->child), + _("_New")); + gtk_widget_add_accelerator (new1, "activate_item", file1_menu_accels, + tmp_key, 0, 0); + gtk_object_set_data (GTK_OBJECT (window1), "new1", new1); + gtk_widget_show (new1); + gtk_container_add (GTK_CONTAINER (file1_menu), new1); + + + + + + + + How can I retrieve the text from a GtkMenuItem? + + You can usually retrieve the label of a specific + GtkMenuItem with: + + + if (GTK_BIN (menu_item)->child) + { + GtkWidget *child = GTK_BIN (menu_item)->child; + + /* do stuff with child */ + if (GTK_IS_LABEL (child)) + { + gchar *text; + + gtk_label_get (GTK_LABEL (child), &text); + g_print ("menu item text: %s\n", text); + } + } + + + To get the active menu item from a GtkOptionMenu you can + do: + + +if (GTK_OPTION_MENU (option_menu)->menu_item) +{ + GtkWidget *menu_item = GTK_OPTION_MENU (option_menu)->menu_item; +} + + + But, there's a catch. For this specific case, you can + not get the label widget from + menu_item with the above code, because the + option menu reparents the menu_item's child temporarily to + display the currently active contents. So to retrive the child + of the currently active menu_item of an option menu, you'll + have to do: + + + + if (GTK_BIN (option_menu)->child) + { + GtkWidget *child = GTK_BIN (option_menu)->child; + + /* do stuff with child */ + } + + + + + + + How do I right (or otherwise) justify a + GtkLabel? + + Are you sure you want to justify + the labels? The label class contains the + gtk_label_set_justify() function that is + used to control the justification of a multi-line + label. + + What you probably want is to set the alignment + of the label, ie right align it, center it or left align + it. If you want to do this, you should use: + + +void gtk_misc_set_alignment (GtkMisc *misc, + gfloat xalign, + gfloat yalign); + + + where the xalign and + yalign values are floats in + [0.00;1.00]. + + + +GtkWidget *label; + +/* horizontal : left align, vertical : top */ +gtk_misc_set_alignment(GTK_MISK(label), 0.0f, 0.0f); + +/* horizontal : centered, vertical : centered */ +gtk_misc_set_alignment(GTK_MISK(label), 0.5f, 0.5f); + +/* horizontal : right align, vertical : bottom */ +gtk_misc_set_alignment(GTK_MISK(label), 1.0f, 1.0f); + + + + + + + How do I set the background color of a GtkLabel + widget? + + The Gtklabel widget is one of a few GTK+ widgets that + don't create their own window to render themselves + into. Instead, they draw themselves directly onto their + parents window. + + This means that in order to set the background color for + a GtkLabel widget, you need to change the background color of + its parent, i.e. the object that you pack it into. +