static gboolean applet_factory (PanelApplet *applet, const gchar *iid, gpointer user_data) { NaTray *tray; AppletData *data; AtkObject *atko; if (!(strcmp (iid, "OAFIID:GNOME_NotificationAreaApplet") == 0 || strcmp (iid, "OAFIID:GNOME_SystemTrayApplet") == 0)) return FALSE; tray = na_tray_new_for_screen (gtk_widget_get_screen (GTK_WIDGET (applet)), get_orientation_from_applet (applet)); data = g_slice_new (AppletData); data->applet = applet; data->tray = tray; data->about_dialog = NULL; g_object_set_data_full (G_OBJECT (applet), "system-tray-data", data, (GDestroyNotify) free_applet_data); atko = gtk_widget_get_accessible (GTK_WIDGET (applet)); atk_object_set_name (atko, _("Panel Notification Area")); panel_applet_set_flags (applet, PANEL_APPLET_HAS_HANDLE|PANEL_APPLET_EXPAND_MINOR); g_signal_connect (applet, "change_orient", G_CALLBACK (applet_change_orientation), data); g_signal_connect (applet, "change_background", G_CALLBACK (applet_change_background), data); g_signal_connect (applet, "destroy", G_CALLBACK (applet_destroy), data); panel_applet_set_background_widget (applet, GTK_WIDGET (applet)); gtk_container_add (GTK_CONTAINER (applet), GTK_WIDGET (tray)); #ifndef NOTIFICATION_AREA_INPROCESS gtk_window_set_default_icon_name (NOTIFICATION_AREA_ICON); #endif gtk_widget_show_all (GTK_WIDGET (applet)); panel_applet_setup_menu_from_file (applet, NULL, "GNOME_NotificationAreaApplet.xml", NULL, menu_verbs, data); return TRUE; }
void cd_systray_build_systray (void) { if (myData.tray != NULL) return; myData.tray = na_tray_new_for_screen (gtk_widget_get_screen (GTK_WIDGET (myContainer->pWidget)), myConfig.iIconPacking == 0 ? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL); na_tray_set_icon_size (myData.tray, 24); na_tray_set_padding (myData.tray, 3); if (myDock) { cd_systray_build_dialog (); } else { gldi_desklet_add_interactive_widget (myDesklet, GTK_WIDGET (myData.tray)); CD_APPLET_SET_DESKLET_RENDERER (NULL); } gtk_widget_show (GTK_WIDGET (myData.tray)); }
static void on_applet_realized(GtkWidget* widget, gpointer user_data) { MatePanelApplet* applet; AppletData* data; NaTray* tray; GtkActionGroup* action_group; gchar* ui_path; applet = MATE_PANEL_APPLET(widget); data = g_object_get_data(G_OBJECT(widget), "system-tray-data"); if (data != NULL) { return; } tray = na_tray_new_for_screen(gtk_widget_get_screen(GTK_WIDGET(applet)), get_orientation_from_applet(applet)); data = g_slice_new(AppletData); data->applet = applet; data->tray = tray; g_object_set_data_full(G_OBJECT(applet), "system-tray-data", data, (GDestroyNotify) free_applet_data); g_signal_connect(applet, "change_orient", G_CALLBACK (applet_change_orientation), data); g_signal_connect(applet, "change_background", G_CALLBACK (applet_change_background), data); g_signal_connect(applet, "destroy", G_CALLBACK (applet_destroy), data); gtk_container_add(GTK_CONTAINER (applet), GTK_WIDGET (tray)); gtk_widget_show(GTK_WIDGET(tray)); action_group = gtk_action_group_new("ClockApplet Menu Actions"); gtk_action_group_set_translation_domain(action_group, GETTEXT_PACKAGE); gtk_action_group_add_actions(action_group, menu_actions, G_N_ELEMENTS(menu_actions), data); ui_path = g_build_filename(NOTIFICATION_AREA_MENU_UI_DIR, "notification-area-menu.xml", NULL); mate_panel_applet_setup_menu_from_file(applet, ui_path, action_group); g_free(ui_path); g_object_unref(action_group); }
static TrayData * create_tray_on_screen (GdkScreen *screen, gboolean force) { GtkWidget *window, *hbox, *vbox, *button, *combo, *label; TrayData *data; n_windows++; if (!force && na_tray_manager_check_running (screen)) { GtkWidget *dialog; dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, "Override tray manager?"); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), "There is already a tray manager running on screen %d.", gdk_screen_get_number (screen)); gtk_window_set_screen (GTK_WINDOW (dialog), screen); g_signal_connect (dialog, "response", G_CALLBACK (warning_dialog_response_cb), screen); gtk_window_present (GTK_WINDOW (dialog)); g_object_weak_ref (G_OBJECT (dialog), (GWeakNotify) maybe_quit, NULL); return NULL; } data = g_new0 (TrayData, 1); data->screen = screen; data->screen_num = gdk_screen_get_number (screen); data->window = window = gtk_window_new (GTK_WINDOW_TOPLEVEL); g_object_weak_ref (G_OBJECT (window), (GWeakNotify) maybe_quit, NULL); vbox = gtk_vbox_new (FALSE, 6); gtk_container_add (GTK_CONTAINER (window), vbox); button = gtk_button_new_with_mnemonic ("_Add another tray"); g_signal_connect (button, "clicked", G_CALLBACK (add_tray_cb), data); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 12); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); label = gtk_label_new_with_mnemonic ("_Orientation:"); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0); combo = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Horizontal"); gtk_combo_box_append_text (GTK_COMBO_BOX (combo), "Vertical"); g_signal_connect (combo, "changed", G_CALLBACK (orientation_changed_cb), data); gtk_box_pack_start (GTK_BOX (hbox), combo, FALSE, FALSE, 0); label = gtk_label_new (NULL); data->count_label = GTK_LABEL (label); gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (vbox), label, FALSE, FALSE, 0); data->tray = na_tray_new_for_screen (screen, GTK_ORIENTATION_HORIZONTAL); gtk_box_pack_start (GTK_BOX (vbox), GTK_WIDGET (data->tray), TRUE, TRUE, 0); data->box = gtk_bin_get_child (GTK_BIN (gtk_bin_get_child (GTK_BIN (data->tray)))); g_signal_connect_after (data->box, "add", G_CALLBACK (tray_added_cb), data); g_signal_connect_after (data->box, "remove", G_CALLBACK (tray_removed_cb), data); gtk_combo_box_set_active (GTK_COMBO_BOX (combo), 0); gtk_window_set_screen (GTK_WINDOW (window), screen); gtk_window_set_default_size (GTK_WINDOW (window), -1, 200); /* gtk_window_set_resizable (GTK_WINDOW (window), FALSE); */ gtk_widget_show_all (window); update_child_count (data); return data; }