static void panel_action_protocol_main_menu (GdkScreen *screen, guint32 activate_time) { PanelWidget *panel_widget; GtkWidget *menu; AppletInfo *info; info = panel_applet_get_by_type (PANEL_OBJECT_MENU_BAR, screen); if (info) { panel_menu_bar_popup_menu (PANEL_MENU_BAR (info->widget), activate_time); return; } info = panel_applet_get_by_type (PANEL_OBJECT_MENU, screen); if (info && panel_menu_button_is_main_menu (PANEL_MENU_BUTTON (info->widget))) { panel_menu_button_popup_menu (PANEL_MENU_BUTTON (info->widget), 1, activate_time); return; } panel_widget = panels->data; menu = create_main_menu (panel_widget); panel_toplevel_push_autohide_disabler (panel_widget->toplevel); gtk_menu_set_screen (GTK_MENU (menu), screen); gtk_menu_popup (GTK_MENU (menu), NULL, NULL, NULL, NULL, 0, activate_time); }
static AtkObject * panel_menu_button_accessible_ref_child (AtkObject *obj, int index) { PanelMenuButton *button; GtkWidget *menu; g_return_val_if_fail (PANEL_IS_MENU_BUTTON_ACCESSIBLE (obj), NULL); if (index != 0) return NULL; #if GTK_CHECK_VERSION (2, 21, 0) if (!(button = PANEL_MENU_BUTTON (gtk_accessible_get_widget (GTK_ACCESSIBLE (obj))))) #else if (!(button = PANEL_MENU_BUTTON (GTK_ACCESSIBLE (obj)->widget))) #endif return NULL; if (!(menu = panel_menu_button_create_menu (button))) return NULL; /* * This ensures that the menu is populated with all menu items */ g_signal_emit_by_name (menu, "show", NULL); return g_object_ref (gtk_widget_get_accessible (menu)); }
static void panel_applet_set_dnd_enabled (AppletInfo *info, gboolean dnd_enabled) { switch (info->type) { case PANEL_OBJECT_MENU: panel_menu_button_set_dnd_enabled (PANEL_MENU_BUTTON (info->widget), dnd_enabled); break; case PANEL_OBJECT_LAUNCHER: panel_launcher_set_dnd_enabled (info->data, dnd_enabled); break; case PANEL_OBJECT_APPLET: break; case PANEL_OBJECT_ACTION: panel_action_button_set_dnd_enabled (PANEL_ACTION_BUTTON (info->widget), dnd_enabled); break; case PANEL_OBJECT_MENU_BAR: case PANEL_OBJECT_SEPARATOR: case PANEL_OBJECT_USER_MENU: break; default: g_assert_not_reached (); break; } }
static void panel_menu_button_finalize (GObject *object) { PanelMenuButton *button = PANEL_MENU_BUTTON (object); panel_lockdown_notify_remove (G_CALLBACK (panel_menu_button_recreate_menu), button); panel_menu_button_disconnect_from_mateconf (button); if (button->priv->menu) { /* detaching the menu will kill our reference */ gtk_menu_detach (GTK_MENU (button->priv->menu)); button->priv->menu = NULL; } g_free (button->priv->applet_id); button->priv->applet_id = NULL; g_free (button->priv->menu_path); button->priv->menu_path = NULL; g_free (button->priv->custom_icon); button->priv->custom_icon = NULL; g_free (button->priv->tooltip); button->priv->tooltip = NULL; G_OBJECT_CLASS (panel_menu_button_parent_class)->finalize (object); }
static void applet_callback_callback (GtkWidget *widget, AppletUserMenu *menu) { GdkScreen *screen; g_return_if_fail (menu->info != NULL); screen = applet_user_menu_get_screen (menu); switch (menu->info->type) { case PANEL_OBJECT_LAUNCHER: if (!strcmp (menu->name, "launch")) launcher_launch (menu->info->data, widget); else if (!strcmp (menu->name, "properties")) launcher_properties (menu->info->data); break; case PANEL_OBJECT_DRAWER: if (strcmp (menu->name, "add") == 0) { Drawer *drawer = menu->info->data; panel_addto_present (GTK_MENU_ITEM (widget), panel_toplevel_get_panel_widget (drawer->toplevel)); } else if (strcmp (menu->name, "properties") == 0) { Drawer *drawer = menu->info->data; panel_properties_dialog_present (drawer->toplevel); } else if (strcmp (menu->name, "help") == 0) { panel_show_help (screen, "user-guide", "gospanel-18", NULL); } break; case PANEL_OBJECT_MENU: panel_menu_button_invoke_menu ( PANEL_MENU_BUTTON (menu->info->widget), menu->name); break; case PANEL_OBJECT_ACTION: case PANEL_OBJECT_LOGOUT: case PANEL_OBJECT_LOCK: panel_action_button_invoke_menu ( PANEL_ACTION_BUTTON (menu->info->widget), menu->name); break; case PANEL_OBJECT_MENU_BAR: panel_menu_bar_invoke_menu ( PANEL_MENU_BAR (menu->info->widget), menu->name); break; case PANEL_OBJECT_APPLET: /* * Applet's menu's are handled differently */ break; case PANEL_OBJECT_SEPARATOR: break; default: g_assert_not_reached (); break; } }
static void panel_menu_button_pressed (GtkButton *gtk_button) { PanelMenuButton *button; g_return_if_fail (PANEL_IS_MENU_BUTTON (gtk_button)); button = PANEL_MENU_BUTTON (gtk_button); if (GTK_BUTTON_CLASS (panel_menu_button_parent_class)->pressed) GTK_BUTTON_CLASS (panel_menu_button_parent_class)->pressed (gtk_button); panel_menu_button_popup_menu (button, 0, gtk_get_current_event_time()); }
static void panel_menu_button_parent_set (GtkWidget *widget, GtkWidget *previous_parent) { PanelMenuButton *button = PANEL_MENU_BUTTON (widget); g_return_if_fail (!widget->parent || PANEL_IS_WIDGET (widget->parent)); if (widget->parent) button->priv->toplevel = PANEL_WIDGET (widget->parent)->toplevel; else button->priv->toplevel = NULL; panel_menu_button_associate_panel (button); panel_menu_button_set_icon (button); if (GTK_WIDGET_CLASS (parent_class)->parent_set) GTK_WIDGET_CLASS (parent_class)->parent_set (widget, previous_parent); }
static AtkObject * panel_menu_button_accessible_ref_child (AtkObject *obj, int index) { PanelMenuButton *button; GtkWidget *menu; g_return_val_if_fail (PANEL_IS_MENU_BUTTON_ACCESSIBLE (obj), NULL); if (index != 0) return NULL; if (!(button = PANEL_MENU_BUTTON (GTK_ACCESSIBLE (obj)->widget))) return NULL; if (!(menu = panel_menu_button_create_menu (button))) return NULL; return g_object_ref (gtk_widget_get_accessible (menu)); }
static void applet_callback_callback (GtkWidget *widget, AppletUserMenu *menu) { g_return_if_fail (menu->info != NULL); switch (menu->info->type) { case PANEL_OBJECT_LAUNCHER: if (!strcmp (menu->name, "launch")) launcher_launch (menu->info->data, widget); else if (!strcmp (menu->name, "properties")) launcher_properties (menu->info->data); break; case PANEL_OBJECT_MENU: panel_menu_button_invoke_menu ( PANEL_MENU_BUTTON (menu->info->widget), menu->name); break; case PANEL_OBJECT_ACTION: panel_action_button_invoke_menu ( PANEL_ACTION_BUTTON (menu->info->widget), menu->name); break; case PANEL_OBJECT_MENU_BAR: panel_menu_bar_invoke_menu ( PANEL_MENU_BAR (menu->info->widget), menu->name); break; case PANEL_OBJECT_APPLET: /* * Applet's menu's are handled differently */ break; case PANEL_OBJECT_SEPARATOR: case PANEL_OBJECT_USER_MENU: break; default: g_assert_not_reached (); break; } }
static void panel_menu_button_clicked (GtkButton *gtk_button) { PanelMenuButton *button; GdkEvent *event; g_return_if_fail (PANEL_IS_MENU_BUTTON (gtk_button)); button = PANEL_MENU_BUTTON (gtk_button); if (GTK_BUTTON_CLASS (panel_menu_button_parent_class)->clicked) GTK_BUTTON_CLASS (panel_menu_button_parent_class)->clicked (gtk_button); if ((event = gtk_get_current_event ())) { panel_menu_button_popup_menu (button, event->button.button, event->button.time); gdk_event_free (event); } else { panel_menu_button_popup_menu (button, 1, GDK_CURRENT_TIME); } }
static void panel_menu_button_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { PanelMenuButton *button; g_return_if_fail (PANEL_IS_MENU_BUTTON (object)); button = PANEL_MENU_BUTTON (object); switch (prop_id) { case PROP_MENU_PATH: panel_menu_button_set_menu_path (button, g_value_get_string (value)); break; case PROP_CUSTOM_ICON: panel_menu_button_set_custom_icon (button, g_value_get_string (value)); break; case PROP_TOOLTIP: panel_menu_button_set_tooltip (button, g_value_get_string (value)); break; case PROP_USE_MENU_PATH: panel_menu_button_set_use_menu_path (button, g_value_get_boolean (value)); break; case PROP_USE_CUSTOM_ICON: panel_menu_button_set_use_custom_icon (button, g_value_get_boolean (value)); break; case PROP_HAS_ARROW: panel_menu_button_set_has_arrow (button, g_value_get_boolean (value)); break; case PROP_DND_ENABLED: panel_menu_button_set_dnd_enabled (button, g_value_get_boolean (value)); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }
static void panel_menu_button_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { PanelMenuButton *button; g_return_if_fail (PANEL_IS_MENU_BUTTON (object)); button = PANEL_MENU_BUTTON (object); switch (prop_id) { case PROP_MENU_PATH: g_value_set_string (value, button->priv->menu_path); break; case PROP_CUSTOM_ICON: g_value_set_string (value, button->priv->custom_icon); break; case PROP_TOOLTIP: g_value_set_string (value, button->priv->tooltip); break; case PROP_USE_MENU_PATH: g_value_set_boolean (value, button->priv->use_menu_path); break; case PROP_USE_CUSTOM_ICON: g_value_set_boolean (value, button->priv->use_custom_icon); break; case PROP_DND_ENABLED: g_value_set_boolean (value, button->priv->dnd_enabled); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; } }