/** * glade_editable_load: * @editable: A #GladeEditable * @widget: the #GladeWidget to load * * Loads @widget property values into @editable * (the editable will watch the widgets properties * until its loaded with another widget or %NULL) */ void glade_editable_load (GladeEditable *editable, GladeWidget *widget) { GladeEditableIface *iface; g_return_if_fail (GLADE_IS_EDITABLE (editable)); g_return_if_fail (widget == NULL || GLADE_IS_WIDGET (widget)); /* Connect to the destroy signal once, make sure we unload the widget and disconnect * to any signals when destroying */ if (!GPOINTER_TO_INT (g_object_get_qdata (G_OBJECT (editable), glade_editable_destroy_quark))) { g_signal_connect (editable, "destroy", G_CALLBACK (editable_destroyed), NULL); g_object_set_qdata (G_OBJECT (editable), glade_editable_destroy_quark, GINT_TO_POINTER (TRUE)); } iface = GLADE_EDITABLE_GET_IFACE (editable); g_object_set_qdata (G_OBJECT (editable), glade_editable_loading_quark, GINT_TO_POINTER (TRUE)); if (iface->load) iface->load (editable, widget); else g_critical ("No GladeEditable::load() support on type %s", G_OBJECT_TYPE_NAME (editable)); g_object_set_qdata (G_OBJECT (editable), glade_editable_loading_quark, GINT_TO_POINTER (FALSE)); }
void glade_popup_widget_pop (GladeWidget *widget, GdkEventButton *event, gboolean packing) { GtkWidget *popup_menu; gint button; gint event_time; g_return_if_fail (GLADE_IS_WIDGET (widget) || widget == NULL); popup_menu = glade_popup_create_menu (widget, NULL, glade_widget_get_project (widget), packing); if (event) { button = event->button; event_time = event->time; } else { button = 0; event_time = gtk_get_current_event_time (); } gtk_menu_popup (GTK_MENU (popup_menu), NULL, NULL, NULL, NULL, button, event_time); }
void glade_gtk_button_post_create (GladeWidgetAdaptor * adaptor, GObject * button, GladeCreateReason reason) { GladeWidget *gbutton = glade_widget_get_from_gobject (button); g_return_if_fail (GTK_IS_BUTTON (button)); g_return_if_fail (GLADE_IS_WIDGET (gbutton)); if (GTK_IS_FONT_BUTTON (button)) g_signal_connect (button, "font-set", G_CALLBACK (glade_gtk_font_button_refresh_font_name), gbutton); else if (GTK_IS_COLOR_BUTTON (button)) g_signal_connect (button, "color-set", G_CALLBACK (glade_gtk_color_button_refresh_color), gbutton); /* Disabled response-id until its in an action area */ glade_widget_property_set_sensitive (gbutton, "response-id", FALSE, RESPID_INSENSITIVE_MSG); if (reason == GLADE_CREATE_USER) glade_gtk_button_update_stock (gbutton); }
void glade_gtk_entry_post_create (GladeWidgetAdaptor * adaptor, GObject * object, GladeCreateReason reason) { GladeWidget *gentry; g_return_if_fail (GTK_IS_ENTRY (object)); gentry = glade_widget_get_from_gobject (object); g_return_if_fail (GLADE_IS_WIDGET (gentry)); g_signal_connect (object, "changed", G_CALLBACK (glade_gtk_entry_changed), gentry); }
static gboolean glade_gtk_table_verify_attach_common (GObject * object, GValue * value, guint * val, const gchar * prop, guint * prop_val, const gchar * parent_prop, guint * parent_val) { GladeWidget *widget, *parent; widget = glade_widget_get_from_gobject (object); g_return_val_if_fail (GLADE_IS_WIDGET (widget), TRUE); parent = glade_widget_get_parent (widget); g_return_val_if_fail (GLADE_IS_WIDGET (parent), TRUE); *val = g_value_get_uint (value); glade_widget_property_get (widget, prop, prop_val); glade_widget_property_get (parent, parent_prop, parent_val); return FALSE; }
static void glade_gtk_image_set_image_mode (GObject *object, const GValue *value) { GladeWidget *gwidget; GladeImageEditMode type; gwidget = glade_widget_get_from_gobject (object); g_return_if_fail (GTK_IS_IMAGE (object)); g_return_if_fail (GLADE_IS_WIDGET (gwidget)); glade_widget_property_set_sensitive (gwidget, "stock", FALSE, NOT_SELECTED_MSG); glade_widget_property_set_sensitive (gwidget, "icon-name", FALSE, NOT_SELECTED_MSG); glade_widget_property_set_sensitive (gwidget, "pixbuf", FALSE, NOT_SELECTED_MSG); glade_widget_property_set_sensitive (gwidget, "resource", FALSE, NOT_SELECTED_MSG); glade_widget_property_set_sensitive (gwidget, "icon-size", FALSE, _("This property only applies to stock images or named icons")); glade_widget_property_set_sensitive (gwidget, "pixel-size", FALSE, _("This property only applies to named icons")); glade_widget_property_set_sensitive (gwidget, "use-fallback", FALSE, _("This property only applies to named icons")); switch ((type = g_value_get_int (value))) { case GLADE_IMAGE_MODE_STOCK: glade_widget_property_set_sensitive (gwidget, "stock", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "icon-size", TRUE, NULL); break; case GLADE_IMAGE_MODE_ICON: glade_widget_property_set_sensitive (gwidget, "icon-name", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "icon-size", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "pixel-size", TRUE, NULL); glade_widget_property_set_sensitive (gwidget, "use-fallback", TRUE, NULL); break; case GLADE_IMAGE_MODE_RESOURCE: glade_widget_property_set_sensitive (gwidget, "resource", TRUE, NULL); break; case GLADE_IMAGE_MODE_FILENAME: glade_widget_property_set_sensitive (gwidget, "pixbuf", TRUE, NULL); default: break; } }
static gboolean glade_gtk_grid_verify_attach_common (GObject *object, GValue *value, const gchar *prop, const gchar *parent_prop) { GladeWidget *widget, *parent; guint parent_val; gint val, prop_val; widget = glade_widget_get_from_gobject (object); g_return_val_if_fail (GLADE_IS_WIDGET (widget), TRUE); parent = glade_widget_get_parent (widget); g_return_val_if_fail (GLADE_IS_WIDGET (parent), TRUE); val = g_value_get_int (value); glade_widget_property_get (widget, prop, &prop_val); glade_widget_property_get (parent, parent_prop, &parent_val); if (val < 0 || (val+prop_val) > parent_val) return FALSE; return TRUE; }
void glade_gtk_menu_bar_post_create (GladeWidgetAdaptor *adaptor, GObject *object, GladeCreateReason reason) { GladeProject *project; GladeWidget *gmenubar, *gitem, *gsubmenu; g_return_if_fail (GTK_IS_MENU_BAR (object)); gmenubar = glade_widget_get_from_gobject (object); g_return_if_fail (GLADE_IS_WIDGET (gmenubar)); if (reason != GLADE_CREATE_USER) return; project = glade_widget_get_project (gmenubar); /* File */ gitem = glade_gtk_menu_bar_append_new_item (gmenubar, project, _("_File"), FALSE); gsubmenu = glade_gtk_menu_bar_append_new_submenu (gitem, project); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-new", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-open", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-save", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-save-as", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, NULL, FALSE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-quit", TRUE); /* Edit */ gitem = glade_gtk_menu_bar_append_new_item (gmenubar, project, _("_Edit"), FALSE); gsubmenu = glade_gtk_menu_bar_append_new_submenu (gitem, project); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-cut", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-copy", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-paste", TRUE); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-delete", TRUE); /* View */ gitem = glade_gtk_menu_bar_append_new_item (gmenubar, project, _("_View"), FALSE); /* Help */ gitem = glade_gtk_menu_bar_append_new_item (gmenubar, project, _("_Help"), FALSE); gsubmenu = glade_gtk_menu_bar_append_new_submenu (gitem, project); glade_gtk_menu_bar_append_new_item (gsubmenu, project, "gtk-about", TRUE); }
static void test_create_widget (gconstpointer data) { GladeWidgetAdaptor *adaptor = (GladeWidgetAdaptor *)data; GladeWidget *widget; GObject *object; gboolean widget_finalized = FALSE; gboolean object_finalized = FALSE; g_test_log_set_fatal_handler (ignore_gvfs_warning, NULL); widget = glade_widget_adaptor_create_widget (adaptor, FALSE, NULL); g_assert (GLADE_IS_WIDGET (widget)); object = glade_widget_get_object (widget); g_assert (G_IS_OBJECT (object)); g_object_weak_ref (G_OBJECT (widget), check_finalized, &widget_finalized); g_object_weak_ref (G_OBJECT (object), check_finalized, &object_finalized); /* filechoosers hold a reference until an async operation is complete */ if (GTK_IS_FILE_CHOOSER (object)) { g_timeout_add (2000, main_loop_quit_cb, NULL); gtk_main(); } /* Our plugin code adds an idle when cell renderers are created */ else if (GTK_IS_CELL_RENDERER (object)) { g_timeout_add (50, main_loop_quit_cb, NULL); gtk_main(); } /* Get rid of the GladeWidget and assert that it finalizes along * with it's internal object */ g_object_unref (widget); g_assert (widget_finalized); g_assert (object_finalized); }
void glade_gtk_sheet_add_child(GladeWidgetAdaptor *adaptor, GObject *object, GObject *child) { GtkSheet *sheet; GtkSheetColumn *newcol; GladeWidget *child_widget = glade_widget_get_from_gobject (child); const gchar *name = glade_widget_get_name(child_widget); g_return_if_fail (GTK_IS_SHEET (object)); g_return_if_fail (GTK_IS_WIDGET (child)); #ifdef GTK_SHEET_DEBUG g_debug("glade_gtk_sheet_add_child: %s %d", name ? name : "NULL", GLADE_IS_WIDGET(child) ); #endif sheet = GTK_SHEET(object); newcol = GTK_SHEET_COLUMN(child); gtk_sheet_buildable_add_child_internal(sheet, newcol, name); }
static void glade_popup_paste_cb (GtkMenuItem *item, gpointer data) { GladeWidget *widget = NULL; GladeProject *project; if (GLADE_IS_WIDGET (data)) { widget = GLADE_WIDGET (data); project = glade_widget_get_project (widget); } else if (GLADE_IS_PROJECT (data)) project = GLADE_PROJECT (data); else g_return_if_reached (); /* The selected widget is the paste destination */ if (widget) glade_project_selection_set (project, glade_widget_get_object (widget), FALSE); else glade_project_selection_clear (project, FALSE); glade_project_command_paste (project, NULL); }
void glade_gtk_box_set_child_property (GladeWidgetAdaptor * adaptor, GObject * container, GObject * child, const gchar * property_name, GValue * value) { GladeWidget *gbox, *gchild, *gchild_iter; GList *children, *list; gboolean is_position; gint old_position, iter_position, new_position; static gboolean recursion = FALSE; g_return_if_fail (GTK_IS_BOX (container)); g_return_if_fail (GTK_IS_WIDGET (child)); g_return_if_fail (property_name != NULL || value != NULL); gbox = glade_widget_get_from_gobject (container); gchild = glade_widget_get_from_gobject (child); g_return_if_fail (GLADE_IS_WIDGET (gbox)); if (gtk_widget_get_parent (GTK_WIDGET (child)) != GTK_WIDGET (container)) return; /* Get old position */ if ((is_position = (strcmp (property_name, "position") == 0)) != FALSE) { gtk_container_child_get (GTK_CONTAINER (container), GTK_WIDGET (child), property_name, &old_position, NULL); /* Get the real value */ new_position = g_value_get_int (value); } if (is_position && recursion == FALSE) { children = glade_widget_get_children (gbox); children = g_list_sort (children, (GCompareFunc) sort_box_children); for (list = children; list; list = list->next) { gchild_iter = glade_widget_get_from_gobject (list->data); if (gchild_iter == gchild) { gtk_box_reorder_child (GTK_BOX (container), GTK_WIDGET (child), new_position); continue; } /* Get the old value from glade */ glade_widget_pack_property_get (gchild_iter, "position", &iter_position); /* Search for the child at the old position and update it */ if (iter_position == new_position && glade_property_superuser () == FALSE) { /* Update glade with the real value */ recursion = TRUE; glade_widget_pack_property_set (gchild_iter, "position", old_position); recursion = FALSE; continue; } else { gtk_box_reorder_child (GTK_BOX (container), GTK_WIDGET (list->data), iter_position); } } for (list = children; list; list = list->next) { gchild_iter = glade_widget_get_from_gobject (list->data); /* Refresh values yet again */ glade_widget_pack_property_get (gchild_iter, "position", &iter_position); gtk_box_reorder_child (GTK_BOX (container), GTK_WIDGET (list->data), iter_position); } if (children) g_list_free (children); } /* Chain Up */ if (!is_position) GWA_GET_CLASS (GTK_TYPE_CONTAINER)->child_set_property (adaptor, container, child, property_name, value); gtk_container_check_resize (GTK_CONTAINER (container)); }
/* * glade_popup_action_populate_menu: * @menu: a GtkMenu to put the actions menu items. * @widget: A #GladeWidget * @action: a @widget subaction or NULL to include all actions. * @packing: TRUE to include packing actions * * Populate a GtkMenu with widget's actions * * Returns the number of action appended to the menu. */ gint glade_popup_action_populate_menu (GtkWidget *menu, GladeWidget *widget, GladeWidgetAction *action, gboolean packing) { gint n; g_return_val_if_fail (GTK_IS_MENU (menu), 0); g_return_val_if_fail (GLADE_IS_WIDGET (widget), 0); g_return_val_if_fail (action == NULL || GLADE_IS_WIDGET_ACTION (action), 0); if (action) { GWActionClass *aclass = glade_widget_action_get_class (action); GList *children = glade_widget_action_get_children (action); if (glade_widget_get_action (widget, aclass->path) && glade_widget_action_get_visible (action)) return glade_popup_action_populate_menu_real (menu, widget, children, G_CALLBACK (glade_popup_menuitem_activated), widget); if (glade_widget_get_pack_action (widget, aclass->path) && glade_widget_action_get_visible (action)) return glade_popup_action_populate_menu_real (menu, glade_widget_get_parent (widget), children, G_CALLBACK (glade_popup_menuitem_packing_activated), widget); return 0; } n = glade_popup_action_populate_menu_real (menu, widget, glade_widget_get_actions (widget), G_CALLBACK (glade_popup_menuitem_activated), widget); if (packing && glade_widget_get_pack_actions (widget)) { if (n) { GtkWidget *separator = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), separator); gtk_widget_show (separator); } n += glade_popup_action_populate_menu_real (menu, glade_widget_get_parent (widget), glade_widget_get_pack_actions (widget), G_CALLBACK (glade_popup_menuitem_packing_activated), widget); } return n; }