static GtkWidget * make_menubar (void) { GtkWidget *w, *menu; GtkWidget *menubar = gtk_menu_bar_new (); /* FIXME: add translatable string here */ w = gtk_menu_item_new_with_label ("Menu"); gtk_menu_shell_append (GTK_MENU_SHELL (menubar), w); gtk_widget_show (GTK_WIDGET (w)); menu = gtk_menu_new (); gtk_menu_item_set_submenu (GTK_MENU_ITEM (w), menu); w = gtk_image_menu_item_new_with_mnemonic (_("Select _Language...")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("preferences-desktop-locale", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (activate_button), "language_button"); w = gtk_image_menu_item_new_with_mnemonic (_("Select _Session...")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("user-desktop", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (activate_button), "session_button"); greeter_system_append_system_menu (menu); /* Add a quit/disconnect item when in xdmcp mode or flexi mode */ /* Do note that the order is important, we always want "Quit" for * flexi, even if not local (non-local xnest). and Disconnect * only for xdmcp */ if ( ! ve_string_empty (g_getenv ("MDM_FLEXI_SERVER"))) { w = gtk_image_menu_item_new_with_mnemonic (_("_Quit")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("system-log-out", GTK_ICON_SIZE_MENU)); } else if (ve_string_empty (g_getenv ("MDM_IS_LOCAL"))) { w = gtk_image_menu_item_new_with_mnemonic (_("D_isconnect")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("system-log-out", GTK_ICON_SIZE_MENU)); } else { w = NULL; } if (w != NULL) { GtkWidget *sep; /* add separator before the quit */ sep = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), sep); gtk_widget_show (GTK_WIDGET (sep)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (gtk_main_quit), NULL); } g_signal_connect (G_OBJECT(gtk_menu_item_get_submenu( gtk_container_get_children(GTK_CONTAINER(menubar))->data)), "selection-done", G_CALLBACK (menubar_done), NULL); return menubar; }
extern "C" int addToGui(gpointer data) { plugData* plugdata=(plugData*)data; GtkTreeViewColumn* column; GtkTreeModel* model=NULL; GtkCellRenderer* renderer; GtkTreeIter iter; GtkWidget* menu; setTextDomain(true,plugdata); menu=gtk_menu_item_get_submenu((GtkMenuItem*)plugdata->mlist.menuView); hideMenu=gtk_menu_item_new_with_label(gettext("Hide Browser")); g_signal_connect(G_OBJECT(hideMenu),"activate",G_CALLBACK(toggleBrowser),plugdata); gtk_menu_shell_append(GTK_MENU_SHELL(menu),hideMenu); gtk_widget_show_all(plugdata->mlist.menuView); store=gtk_tree_store_new(NUM_COLUMNS,GDK_TYPE_PIXBUF,G_TYPE_STRING,G_TYPE_STRING); addFolderContents("/",&iter,true); model=GTK_TREE_MODEL(store); treeview=gtk_tree_view_new_with_model(model); gtk_tree_view_set_enable_tree_lines((GtkTreeView*)treeview,true); scrollbox=gtk_scrolled_window_new(NULL,NULL); gtk_scrolled_window_set_policy((GtkScrolledWindow*)scrollbox,GTK_POLICY_AUTOMATIC,GTK_POLICY_AUTOMATIC); gtk_container_add(GTK_CONTAINER(scrollbox),(GtkWidget*)treeview); gtk_box_pack_start((GtkBox*)plugdata->leftUserBox,scrollbox,true,true,0); gtk_widget_show_all(plugdata->leftUserBox); gtk_widget_set_size_request((GtkWidget*)scrollbox,100,-1); //pixbuf renderer=gtk_cell_renderer_pixbuf_new(); column=gtk_tree_view_column_new_with_attributes("path",renderer,"pixbuf",COLUMN_PIXBUF,NULL); gtk_tree_view_column_set_resizable(column,false); gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_append_column((GtkTreeView*)treeview,column); gtk_tree_view_column_set_spacing(column,0); gtk_tree_view_column_set_expand(column,false); //colom file renderer=gtk_cell_renderer_text_new(); column=gtk_tree_view_column_new_with_attributes(NULL,renderer,"text",COLUMN_FILENAME,NULL); gtk_tree_view_column_set_resizable(column,true); gtk_tree_view_column_set_sizing(column,GTK_TREE_VIEW_COLUMN_AUTOSIZE); gtk_tree_view_append_column((GtkTreeView*)treeview,column); gtk_tree_view_column_set_expand(column,true); gtk_tree_view_column_set_spacing(column,0); gtk_tree_view_set_headers_visible((GtkTreeView*)treeview,false); g_signal_connect(treeview,"row-expanded",G_CALLBACK(expandRow),column); g_signal_connect(treeview,"row-collapsed",G_CALLBACK(collapseRow),column); g_signal_connect(treeview,"row-activated",G_CALLBACK(onRowActivated),NULL); leftBox=(GtkWidget*)plugdata->leftUserBox; doStartUpCheck(plugdata); showHideBrowser(plugdata,true); if(showing==true) showSide(true); else hideSide(true); setTextDomain(false,plugdata); return(0); }
static void anjuta_window_instance_init (AnjutaWindow *win) { GtkWidget *menubar, *about_menu; GtkWidget *view_menu, *hbox; GtkWidget *main_box; GtkWidget *dockbar; GtkAction* action; GList *plugins_dirs = NULL; GdkGeometry size_hints = { 100, 100, 0, 0, 100, 100, 1, 1, 0.0, 0.0, GDK_GRAVITY_NORTH_WEST }; DEBUG_PRINT ("%s", "Initializing Anjuta..."); gtk_window_set_geometry_hints (GTK_WINDOW (win), GTK_WIDGET (win), &size_hints, GDK_HINT_RESIZE_INC); gtk_window_set_resizable (GTK_WINDOW (win), TRUE); /* * Main box */ main_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_container_add (GTK_CONTAINER (win), main_box); gtk_widget_show (main_box); win->values = NULL; win->widgets = NULL; win->maximized = FALSE; /* Settings */ win->settings = g_settings_new (PREF_SCHEMA); /* Status bar */ win->status = ANJUTA_STATUS (anjuta_status_new ()); anjuta_status_set_title_window (win->status, GTK_WIDGET (win)); gtk_widget_show (GTK_WIDGET (win->status)); gtk_box_pack_end (GTK_BOX (main_box), GTK_WIDGET (win->status), FALSE, TRUE, 0); g_object_ref (G_OBJECT (win->status)); g_object_add_weak_pointer (G_OBJECT (win->status), (gpointer)&win->status); /* configure dock */ hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 0); gtk_widget_show (hbox); win->dock = gdl_dock_new (); gtk_widget_show (win->dock); gtk_box_pack_end(GTK_BOX (hbox), win->dock, TRUE, TRUE, 0); dockbar = gdl_dock_bar_new (G_OBJECT (win->dock)); gtk_widget_show (dockbar); gtk_box_pack_start(GTK_BOX (hbox), dockbar, FALSE, FALSE, 0); win->layout_manager = gdl_dock_layout_new (G_OBJECT (win->dock)); g_signal_connect (win->layout_manager, "notify::dirty", G_CALLBACK (on_layout_dirty_notify), win); g_signal_connect (gdl_dock_layout_get_master (win->layout_manager), "notify::locked", G_CALLBACK (on_layout_locked_notify), win); /* UI engine */ win->ui = anjuta_ui_new (); g_object_add_weak_pointer (G_OBJECT (win->ui), (gpointer)&win->ui); /* show tooltips in the statusbar */ g_signal_connect (win->ui, "connect_proxy", G_CALLBACK (connect_proxy_cb), win); g_signal_connect (win->ui, "disconnect_proxy", G_CALLBACK (disconnect_proxy_cb), win); /* Plugin Manager */ plugins_dirs = g_list_prepend (plugins_dirs, PACKAGE_PLUGIN_DIR); win->plugin_manager = anjuta_plugin_manager_new (G_OBJECT (win), win->status, plugins_dirs); win->profile_manager = anjuta_profile_manager_new (win->plugin_manager); g_list_free (plugins_dirs); /* Preferences */ win->preferences = anjuta_preferences_new (win->plugin_manager, PREF_SCHEMA); g_object_add_weak_pointer (G_OBJECT (win->preferences), (gpointer)&win->preferences); g_signal_connect (win->settings, "changed::" GDL_STYLE, G_CALLBACK (on_gdl_style_changed), win); on_gdl_style_changed (win->settings, GDL_STYLE, win); /* Register actions */ anjuta_ui_add_action_group_entries (win->ui, "ActionGroupFile", _("File"), menu_entries_file, G_N_ELEMENTS (menu_entries_file), GETTEXT_PACKAGE, TRUE, win); anjuta_ui_add_action_group_entries (win->ui, "ActionGroupEdit", _("Edit"), menu_entries_edit, G_N_ELEMENTS (menu_entries_edit), GETTEXT_PACKAGE, TRUE, win); anjuta_ui_add_action_group_entries (win->ui, "ActionGroupView", _("View"), menu_entries_view, G_N_ELEMENTS (menu_entries_view), GETTEXT_PACKAGE, TRUE, win); anjuta_ui_add_toggle_action_group_entries (win->ui, "ActionGroupToggleView", _("View"), menu_entries_toggle_view, G_N_ELEMENTS (menu_entries_toggle_view), GETTEXT_PACKAGE, TRUE, win); anjuta_ui_add_action_group_entries (win->ui, "ActionGroupHelp", _("Help"), menu_entries_help, G_N_ELEMENTS (menu_entries_help), GETTEXT_PACKAGE, TRUE, win); /* Merge UI */ anjuta_ui_merge (win->ui, UI_FILE); /* Adding accels group */ gtk_window_add_accel_group (GTK_WINDOW (win), gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (win->ui))); /* create main menu */ menubar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (win->ui), "/MenuMain"); gtk_box_pack_start (GTK_BOX (main_box), menubar, FALSE, FALSE, 0); gtk_widget_show (menubar); /* create toolbar */ win->toolbar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (win->ui), "/ToolbarMain"); if (!g_settings_get_boolean (win->settings, TOOLBAR_VISIBLE)) gtk_widget_hide (win->toolbar); gtk_style_context_add_class (gtk_widget_get_style_context (win->toolbar), GTK_STYLE_CLASS_PRIMARY_TOOLBAR); gtk_toolbar_set_icon_size (GTK_TOOLBAR (win->toolbar), GTK_ICON_SIZE_MENU); gtk_box_pack_start (GTK_BOX (main_box), win->toolbar, FALSE, FALSE, 0); action = gtk_ui_manager_get_action (GTK_UI_MANAGER (win->ui), "/MenuMain/MenuView/Toolbar"); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION(action), g_settings_get_boolean (win->settings, TOOLBAR_VISIBLE)); g_signal_connect (win->settings, "changed::" TOOLBAR_STYLE, G_CALLBACK (on_toolbar_style_changed), win); on_toolbar_style_changed (win->settings, TOOLBAR_STYLE, win); /* Create widgets menu */ view_menu = gtk_ui_manager_get_widget (GTK_UI_MANAGER(win->ui), "/MenuMain/MenuView"); win->view_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view_menu)); /* Create about plugins menu */ about_menu = gtk_ui_manager_get_widget (GTK_UI_MANAGER(win->ui), "/MenuMain/PlaceHolderHelpMenus/MenuHelp/" "PlaceHolderHelpAbout/AboutPlugins"); about_create_plugins_submenu (ANJUTA_SHELL (win), about_menu); /* Add main view */ gtk_box_pack_start (GTK_BOX (main_box), hbox, TRUE, TRUE, 0); /* Connect to session */ g_signal_connect (G_OBJECT (win), "save_session", G_CALLBACK (on_session_save), win); g_signal_connect (G_OBJECT (win), "load_session", G_CALLBACK (on_session_load), win); /* Loading accels */ anjuta_ui_load_accels (NULL); win->save_count = 0; }
gint main(gint argc, gchar *argv[]) { GtkWidget *window; GtkWidget *vbox; GtkWidget *menubar; GtkWidget *subMenu; GtkWidget *menuitem; GtkWidget *toolbar; GtkActionGroup* actiongroup; GtkUIManager* ui_manager;//主界面,包含了待建立的界面和相关的动作 gtk_init(&argc, &argv); /**********初始化主界面$$$$$$$$**********{*/ /*初始化主界面相关动作信息*/ action_init(&actiongroup, &ui_manager); /*初始华主界面具体界面信息*/ ui_init(&actiongroup, &ui_manager); /**********初始化主界面$$$$$$$$**********}*/ /*window*/ window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(window, "destroy" , G_CALLBACK(gtk_main_quit), NULL); /*添加快捷键*/ gtk_window_add_accel_group(GTK_WINDOW(window), gtk_ui_manager_get_accel_group(ui_manager)); /*vbox*/ vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(window), vbox); /***********使用、设置主界面中的元素$$$$$$******{*/ /*从主界面获取一个部件的方法,便于添加到窗口中为什么这里有一个警告?*/ menubar = gtk_ui_manager_get_widget(ui_manager, "/menubar"); gtk_box_pack_start(GTK_BOX(vbox), menubar, FALSE, FALSE, 0); /*从主界面获取一个菜单项的方法,获取之后设置其属性*/ menuitem = gtk_ui_manager_get_widget(ui_manager, "/menubar/Menu1/menuitem1.1"); /*从主界面把本来可以点击的菜单按钮设置为无法点击,非激活状态,工具栏上面仍然可以点*/ gtk_widget_set_sensitive(GTK_WIDGET(menuitem), FALSE); /*从主界面获取一个子菜单的方法,获取之后添加一个额外不属于主界面的菜单*/ subMenu = gtk_menu_item_get_submenu( GTK_MENU_ITEM(gtk_ui_manager_get_widget(ui_manager, "/menubar/Menu2"))); /*可以添加2个额外的分割线*/ menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(subMenu), menuitem); menuitem = gtk_separator_menu_item_new(); gtk_menu_shell_append(GTK_MENU_SHELL(subMenu), menuitem); menuitem = gtk_menu_item_new_with_label("added out the Ui"); gtk_menu_shell_append(GTK_MENU_SHELL(subMenu), menuitem); gtk_widget_show_all(GTK_WIDGET(subMenu));//此处如果不写,那么即使后面有window的show_all那也没法显示这个菜单. /*从主界面获取工具栏的部件*/ toolbar = gtk_ui_manager_get_widget(ui_manager, "/toolbar_navigation"); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(toolbar), 0); gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0); g_object_unref(ui_manager); /***********使用、设置主界面中的元素$$$$$$******}*/ gtk_widget_show_all(window); gtk_main(); return 0; }
static void anjuta_app_instance_init (AnjutaApp *app) { gint merge_id; GtkWidget *menubar, *about_menu; GtkWidget *view_menu, *hbox; GtkWidget *main_box; GtkWidget *dockbar; GtkAction* action; GList *plugins_dirs = NULL; gchar* style; GdkGeometry size_hints = { 100, 100, 0, 0, 100, 100, 1, 1, 0.0, 0.0, GDK_GRAVITY_NORTH_WEST }; DEBUG_PRINT ("%s", "Initializing Anjuta..."); gtk_window_set_geometry_hints (GTK_WINDOW (app), GTK_WIDGET (app), &size_hints, GDK_HINT_RESIZE_INC); gtk_window_set_resizable (GTK_WINDOW (app), TRUE); /* * Main box */ main_box = gtk_vbox_new (FALSE, 0); gtk_container_add (GTK_CONTAINER (app), main_box); gtk_widget_show (main_box); app->values = NULL; app->widgets = NULL; /* Status bar */ app->status = ANJUTA_STATUS (anjuta_status_new ()); anjuta_status_set_title_window (app->status, GTK_WIDGET (app)); gtk_widget_show (GTK_WIDGET (app->status)); gtk_box_pack_end (GTK_BOX (main_box), GTK_WIDGET (app->status), FALSE, TRUE, 0); g_object_ref (G_OBJECT (app->status)); g_object_add_weak_pointer (G_OBJECT (app->status), (gpointer)&app->status); /* configure dock */ hbox = gtk_hbox_new (FALSE, 0); gtk_widget_show (hbox); app->dock = gdl_dock_new (); gtk_widget_show (app->dock); gtk_box_pack_end(GTK_BOX (hbox), app->dock, TRUE, TRUE, 0); dockbar = gdl_dock_bar_new (GDL_DOCK(app->dock)); gtk_widget_show (dockbar); gtk_box_pack_start(GTK_BOX (hbox), dockbar, FALSE, FALSE, 0); app->layout_manager = gdl_dock_layout_new (GDL_DOCK (app->dock)); g_signal_connect (app->layout_manager, "notify::dirty", G_CALLBACK (on_layout_dirty_notify), app); g_signal_connect (app->layout_manager->master, "notify::locked", G_CALLBACK (on_layout_locked_notify), app); /* UI engine */ app->ui = anjuta_ui_new (); g_object_add_weak_pointer (G_OBJECT (app->ui), (gpointer)&app->ui); /* show tooltips in the statusbar */ g_signal_connect (app->ui, "connect_proxy", G_CALLBACK (connect_proxy_cb), app); g_signal_connect (app->ui, "disconnect_proxy", G_CALLBACK (disconnect_proxy_cb), app); /* Plugin Manager */ plugins_dirs = g_list_prepend (plugins_dirs, PACKAGE_PLUGIN_DIR); app->plugin_manager = anjuta_plugin_manager_new (G_OBJECT (app), app->status, plugins_dirs); app->profile_manager = anjuta_profile_manager_new (app->plugin_manager); g_list_free (plugins_dirs); /* Preferences */ app->preferences = anjuta_preferences_new (app->plugin_manager); g_object_add_weak_pointer (G_OBJECT (app->preferences), (gpointer)&app->preferences); anjuta_preferences_notify_add_string (app->preferences, "anjuta.gdl.style", on_gdl_style_changed, app, NULL); style = anjuta_preferences_get (app->preferences, "anjuta.gdl.style"); on_gdl_style_changed (app->preferences, NULL, style, app); g_free (style); /* Register actions */ anjuta_ui_add_action_group_entries (app->ui, "ActionGroupFile", _("File"), menu_entries_file, G_N_ELEMENTS (menu_entries_file), GETTEXT_PACKAGE, TRUE, app); anjuta_ui_add_action_group_entries (app->ui, "ActionGroupEdit", _("Edit"), menu_entries_edit, G_N_ELEMENTS (menu_entries_edit), GETTEXT_PACKAGE, TRUE, app); anjuta_ui_add_action_group_entries (app->ui, "ActionGroupView", _("View"), menu_entries_view, G_N_ELEMENTS (menu_entries_view), GETTEXT_PACKAGE, TRUE, app); anjuta_ui_add_toggle_action_group_entries (app->ui, "ActionGroupToggleView", _("View"), menu_entries_toggle_view, G_N_ELEMENTS (menu_entries_toggle_view), GETTEXT_PACKAGE, TRUE, app); anjuta_ui_add_action_group_entries (app->ui, "ActionGroupHelp", _("Help"), menu_entries_help, G_N_ELEMENTS (menu_entries_help), GETTEXT_PACKAGE, TRUE, app); /* Merge UI */ merge_id = anjuta_ui_merge (app->ui, UI_FILE); /* Adding accels group */ gtk_window_add_accel_group (GTK_WINDOW (app), gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (app->ui))); /* create main menu */ menubar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (app->ui), "/MenuMain"); gtk_box_pack_start (GTK_BOX (main_box), menubar, FALSE, FALSE, 0); gtk_widget_show (menubar); /* create toolbar */ app->toolbar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (app->ui), "/ToolbarMain"); if (!anjuta_preferences_get_bool (app->preferences, "anjuta.toolbar.visible")) gtk_widget_hide (app->toolbar); gtk_box_pack_start (GTK_BOX (main_box), app->toolbar, FALSE, FALSE, 0); action = gtk_ui_manager_get_action (GTK_UI_MANAGER (app->ui), "/MenuMain/MenuView/Toolbar"); gtk_toggle_action_set_active (GTK_TOGGLE_ACTION(action), anjuta_preferences_get_bool_with_default (app->preferences, "anjuta.toolbar.visible", TRUE)); anjuta_preferences_notify_add_string (app->preferences, "anjuta.toolbar.style", on_toolbar_style_changed, app, NULL); style = anjuta_preferences_get (app->preferences, "anjuta.toolbar.style"); on_toolbar_style_changed (app->preferences, NULL, style, app); g_free (style); /* Create widgets menu */ view_menu = gtk_ui_manager_get_widget (GTK_UI_MANAGER(app->ui), "/MenuMain/MenuView"); app->view_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view_menu)); /* Disable unavailible tutorials */ action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpTutorial"); g_object_set(G_OBJECT(action), "visible", FALSE, NULL); action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpAdvancedTutorial"); g_object_set(G_OBJECT(action), "visible", FALSE, NULL); /* Create about plugins menu */ about_menu = gtk_ui_manager_get_widget (GTK_UI_MANAGER(app->ui), "/MenuMain/PlaceHolderHelpMenus/MenuHelp/" "PlaceHolderHelpAbout/AboutPlugins"); about_create_plugins_submenu (ANJUTA_SHELL (app), about_menu); /* Add main view */ gtk_box_pack_start (GTK_BOX (main_box), hbox, TRUE, TRUE, 0); /* Connect to session */ g_signal_connect (G_OBJECT (app), "save_session", G_CALLBACK (on_session_save), app); g_signal_connect (G_OBJECT (app), "load_session", G_CALLBACK (on_session_load), app); /* Loading accels */ anjuta_ui_load_accels (NULL); app->save_count = 0; }
static void gtk_radio_menu_item_activate (GtkMenuItem *menu_item) { GtkRadioMenuItem *radio_menu_item = GTK_RADIO_MENU_ITEM (menu_item); GtkRadioMenuItemPrivate *priv = radio_menu_item->priv; GtkCheckMenuItem *check_menu_item = GTK_CHECK_MENU_ITEM (menu_item); GtkCheckMenuItem *tmp_menu_item; GtkAction *action; GSList *tmp_list; gboolean active; gint toggled; G_GNUC_BEGIN_IGNORE_DEPRECATIONS; action = gtk_activatable_get_related_action (GTK_ACTIVATABLE (menu_item)); if (action && gtk_menu_item_get_submenu (menu_item) == NULL) gtk_action_activate (action); G_GNUC_END_IGNORE_DEPRECATIONS; toggled = FALSE; active = gtk_check_menu_item_get_active (check_menu_item); if (active) { tmp_menu_item = NULL; tmp_list = priv->group; while (tmp_list) { tmp_menu_item = tmp_list->data; tmp_list = tmp_list->next; if (gtk_check_menu_item_get_active (tmp_menu_item) && tmp_menu_item != check_menu_item) break; tmp_menu_item = NULL; } if (tmp_menu_item) { toggled = TRUE; _gtk_check_menu_item_set_active (check_menu_item, !active); } } else { toggled = TRUE; _gtk_check_menu_item_set_active (check_menu_item, !active); tmp_list = priv->group; while (tmp_list) { tmp_menu_item = tmp_list->data; tmp_list = tmp_list->next; if (gtk_check_menu_item_get_active (tmp_menu_item) && tmp_menu_item != check_menu_item) { gtk_menu_item_activate (GTK_MENU_ITEM (tmp_menu_item)); break; } } } if (toggled) { gtk_check_menu_item_toggled (check_menu_item); } gtk_widget_queue_draw (GTK_WIDGET (radio_menu_item)); }
static void gui_restore_after_callback (Gimp *gimp, GimpInitStatusFunc status_callback) { GimpGuiConfig *gui_config = GIMP_GUI_CONFIG (gimp->config); GimpDisplay *display; if (gimp->be_verbose) g_print ("INIT: %s\n", G_STRFUNC); gimp->message_handler = GIMP_MESSAGE_BOX; if (gui_config->restore_accels) menus_restore (gimp); ui_configurer = g_object_new (GIMP_TYPE_UI_CONFIGURER, "gimp", gimp, NULL); image_ui_manager = gimp_menu_factory_manager_new (global_menu_factory, "<Image>", gimp, gui_config->tearoff_menus); gimp_ui_manager_update (image_ui_manager, gimp); #ifdef GDK_WINDOWING_QUARTZ { IgeMacMenuGroup *group; GtkWidget *menu; GtkWidget *item; menu = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager), "/dummy-menubar/image-popup"); if (GTK_IS_MENU_ITEM (menu)) menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (menu)); ige_mac_menu_set_menu_bar (GTK_MENU_SHELL (menu)); item = gtk_ui_manager_get_widget (GTK_UI_MANAGER (image_ui_manager), "/dummy-menubar/image-popup/File/file-quit"); if (GTK_IS_MENU_ITEM (item)) ige_mac_menu_set_quit_menu_item (GTK_MENU_ITEM (item)); /* the about group */ group = ige_mac_menu_add_app_menu_group (); gui_add_to_app_menu (image_ui_manager, group, "/dummy-menubar/image-popup/Help/dialogs-about", _("About GIMP")); /* the preferences group */ group = ige_mac_menu_add_app_menu_group (); #define PREFERENCES "/dummy-menubar/image-popup/Edit/Preferences/" gui_add_to_app_menu (image_ui_manager, group, PREFERENCES "dialogs-preferences", NULL); gui_add_to_app_menu (image_ui_manager, group, PREFERENCES "dialogs-input-devices", NULL); gui_add_to_app_menu (image_ui_manager, group, PREFERENCES "dialogs-keyboard-shortcuts", NULL); gui_add_to_app_menu (image_ui_manager, group, PREFERENCES "dialogs-module-dialog", NULL); gui_add_to_app_menu (image_ui_manager, group, PREFERENCES "plug-in-unit-editor", NULL); #undef PREFERENCES } #endif /* GDK_WINDOWING_QUARTZ */ g_signal_connect_object (gui_config, "notify::single-window-mode", G_CALLBACK (gui_single_window_mode_notify), ui_configurer, 0); g_signal_connect_object (gui_config, "notify::tearoff-menus", G_CALLBACK (gui_tearoff_menus_notify), image_ui_manager, 0); g_signal_connect (image_ui_manager, "show-tooltip", G_CALLBACK (gui_menu_show_tooltip), gimp); g_signal_connect (image_ui_manager, "hide-tooltip", G_CALLBACK (gui_menu_hide_tooltip), gimp); gimp_devices_restore (gimp); gimp_controllers_restore (gimp, image_ui_manager); if (status_callback == splash_update) splash_destroy (); color_history_restore (gimp); if (gimp_get_show_gui (gimp)) { GimpDisplayShell *shell; /* create the empty display */ display = GIMP_DISPLAY (gimp_create_display (gimp, NULL, GIMP_UNIT_PIXEL, 1.0)); shell = gimp_display_get_shell (display); if (gui_config->restore_session) session_restore (gimp); /* move keyboard focus to the display */ gtk_window_present (GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (shell)))); } /* indicate that the application has finished loading */ gdk_notify_startup_complete (); }
static void gail_focus_notify_when_idle (GtkWidget *widget) { if (focus_notify_handler) { if (widget) { /* * Ignore focus request when menu item is going to be focused. * See bug #124232. */ if (GTK_IS_MENU_ITEM (next_focus_widget) && !GTK_IS_MENU_ITEM (widget)) return; if (next_focus_widget) { if (GTK_IS_MENU_ITEM (next_focus_widget) && GTK_IS_MENU_ITEM (widget)) { if (gtk_menu_item_get_submenu (GTK_MENU_ITEM (next_focus_widget)) == gtk_widget_get_parent (widget)) { if (subsequent_focus_widget) g_assert_not_reached (); subsequent_focus_widget = widget; return; } } } g_source_remove (focus_notify_handler); if (next_focus_widget) { void *vp_next_focus_widget = &next_focus_widget; g_object_remove_weak_pointer (G_OBJECT (next_focus_widget), vp_next_focus_widget); next_focus_widget = NULL; } } else /* * Ignore if focus is being set to NULL and we are waiting to set focus */ return; } if (widget) { void *vp_next_focus_widget = &next_focus_widget; next_focus_widget = widget; g_object_add_weak_pointer (G_OBJECT (next_focus_widget), vp_next_focus_widget); } else { /* * We are about to report focus as NULL so remove the weak pointer * for the widget we were waiting to report focus on. */ if (next_focus_widget) { void *vp_next_focus_widget = &next_focus_widget; g_object_remove_weak_pointer (G_OBJECT (next_focus_widget), vp_next_focus_widget); next_focus_widget = NULL; } } focus_notify_handler = gdk_threads_add_idle (gail_focus_idle_handler, widget); }