void tray_init(GtkWidget* container) { _icons = g_hash_table_new(g_direct_hash, g_direct_equal); GdkScreen* screen = gdk_screen_get_default(); NaTrayManager* tray_manager = NULL; tray_manager = na_tray_manager_new(); //TODO: update _na_base_y na_tray_manager_manage_screen(tray_manager, screen); g_signal_connect(tray_manager, "tray_icon_added", G_CALLBACK(tray_icon_added), container); g_signal_connect_after(container, "draw", G_CALLBACK(draw_tray_icons), NULL); _TRY_ICON_INIT = TRUE; }
static void cinnamon_tray_manager_init (CinnamonTrayManager *manager) { manager->priv = G_TYPE_INSTANCE_GET_PRIVATE (manager, CINNAMON_TYPE_TRAY_MANAGER, CinnamonTrayManagerPrivate); manager->priv->na_manager = na_tray_manager_new (); manager->priv->icons = g_hash_table_new_full (NULL, NULL, NULL, free_tray_icon); manager->priv->bg_color = default_color; g_signal_connect (manager->priv->na_manager, "tray-icon-added", G_CALLBACK (na_tray_icon_added), manager); g_signal_connect (manager->priv->na_manager, "tray-icon-removed", G_CALLBACK (na_tray_icon_removed), manager); }
static GObject * na_tray_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_params) { GObject *object; NaTray *tray; NaTrayPrivate *priv; int screen_number; object = G_OBJECT_CLASS (na_tray_parent_class)->constructor (type, n_construct_properties, construct_params); tray = NA_TRAY (object); priv = tray->priv; g_assert (priv->screen != NULL); if (!initialized) { GdkDisplay *display; int n_screens; display = gdk_display_get_default (); n_screens = gdk_display_get_n_screens (display); trays_screens = g_new0 (TraysScreen, n_screens); initialized = TRUE; } screen_number = gdk_screen_get_number (priv->screen); if (trays_screens [screen_number].tray_manager == NULL) { NaTrayManager *tray_manager; tray_manager = na_tray_manager_new (); if (na_tray_manager_manage_screen (tray_manager, priv->screen)) { trays_screens [screen_number].tray_manager = tray_manager; g_signal_connect (tray_manager, "tray_icon_added", G_CALLBACK (tray_added), &trays_screens [screen_number]); g_signal_connect (tray_manager, "tray_icon_removed", G_CALLBACK (tray_removed), &trays_screens [screen_number]); g_signal_connect (tray_manager, "message_sent", G_CALLBACK (message_sent), &trays_screens [screen_number]); g_signal_connect (tray_manager, "message_cancelled", G_CALLBACK (message_cancelled), &trays_screens [screen_number]); trays_screens [screen_number].icon_table = g_hash_table_new (NULL, NULL); trays_screens [screen_number].tip_table = g_hash_table_new_full ( NULL, NULL, NULL, icon_tip_free); } else { g_printerr ("System tray didn't get the system tray manager selection for screen %d\n", screen_number); g_object_unref (tray_manager); } } priv->trays_screen = &trays_screens [screen_number]; trays_screens [screen_number].all_trays = g_slist_append (trays_screens [screen_number].all_trays, tray); update_size_and_orientation (tray); return object; }