aboutsummaryrefslogtreecommitdiffstats
path: root/applets/systray/systray.c
diff options
context:
space:
mode:
Diffstat (limited to 'applets/systray/systray.c')
-rw-r--r--applets/systray/systray.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/applets/systray/systray.c b/applets/systray/systray.c
new file mode 100644
index 0000000..ac94bf5
--- /dev/null
+++ b/applets/systray/systray.c
@@ -0,0 +1,89 @@
+/*
+ * (C) 2006 OpenedHand Ltd.
+ *
+ * Author: Jorn Baayen <jorn@openedhand.com>
+ *
+ * Licensed under the GPL v2 or greater.
+ */
+
+#include <gtk/gtkhbox.h>
+#include <gtk/gtkvbox.h>
+#include <matchbox-panel/mb-panel.h>
+
+#include "eggtraymanager.h"
+
+/* TODO: messages */
+
+/* Tray icon added */
+static void
+tray_icon_added_cb (EggTrayManager *manager,
+ GtkWidget *icon,
+ GtkBox *box)
+{
+ gtk_box_pack_start (box, icon, FALSE, FALSE, 0);
+}
+
+/* Screen changed */
+static void
+screen_changed_cb (GtkWidget *widget,
+ GdkScreen *screen,
+ EggTrayManager *manager)
+{
+ if (!screen)
+ screen = gdk_screen_get_default ();
+
+ if (egg_tray_manager_check_running (screen)) {
+ g_warning ("Another system tray manager is running. "
+ "Not managing screen.");
+
+ return;
+ }
+
+ egg_tray_manager_manage_screen (manager, screen);
+}
+
+G_MODULE_EXPORT GtkWidget *
+mb_panel_applet_create (const char *id,
+ int panel_width,
+ int panel_height)
+{
+ EggTrayManager *manager;
+ GtkOrientation orientation;
+ GtkWidget *box;
+
+ /* Is this a vertical panel? */
+ if (panel_width >= panel_height) {
+ orientation = GTK_ORIENTATION_HORIZONTAL;
+
+ box = gtk_hbox_new (0, FALSE);
+ } else {
+ orientation = GTK_ORIENTATION_VERTICAL;
+
+ box = gtk_vbox_new (0, FALSE);
+ }
+
+ gtk_widget_set_name (box, "MatchboxPanelSystemTray");
+
+ /* Create tray manager */
+ manager = egg_tray_manager_new ();
+ egg_tray_manager_set_orientation (manager, orientation);
+
+ g_signal_connect (manager,
+ "tray-icon-added",
+ G_CALLBACK (tray_icon_added_cb),
+ box);
+
+ g_signal_connect (box,
+ "screen-changed",
+ G_CALLBACK (screen_changed_cb),
+ manager);
+
+ g_object_weak_ref (G_OBJECT (box),
+ (GWeakNotify) g_object_unref,
+ manager);
+
+ /* Show! */
+ gtk_widget_show (box);
+
+ return box;
+}