[Xfce4-commits] <orage:master> Added Globaltime call to the trayicon menu and to the Orage Show menu

Juha Kautto noreply at xfce.org
Sat Dec 11 18:12:01 CET 2010


Updating branch refs/heads/master
         to 404a5e2893a8581bcdcf8747caa104c76b802109 (commit)
       from 649855e06adf39fd851145b78c6a5aafe08145af (commit)

commit 404a5e2893a8581bcdcf8747caa104c76b802109
Author: Juha Kautto <juha at xfce.org>
Date:   Sat Dec 11 19:06:55 2010 +0200

    Added Globaltime call to the trayicon menu and to the Orage Show menu
    
    Made it possible to call globaltime form the menus. Also mouse middle button
    now works same way in the trayicon than in Xfce panelplugin (= raises and hides
    globaltime each time pressed). Also minor missed fix to timezone show in
    globaltime and panelplugin.

 configure.in.in                 |    2 +-
 globaltime/tz_zoneinfo_read.c   |    4 +-
 panel-plugin/tz_zoneinfo_read.c |    5 ++-
 src/functions.c                 |   33 +--------------
 src/mainbox.c                   |   28 ++++++++++++-
 src/mainbox.h                   |    1 +
 src/tray_icon.c                 |   90 ++++++++++++++++++++++++++++++---------
 7 files changed, 107 insertions(+), 56 deletions(-)

diff --git a/configure.in.in b/configure.in.in
index e20edf7..3179c68 100644
--- a/configure.in.in
+++ b/configure.in.in
@@ -9,7 +9,7 @@ dnl Written for Xfce by Juha Kautto <juha at xfce.org>
 dnl
 
 dnl Version information
-m4_define([orage_version], [4.7.6.3-git])
+m4_define([orage_version], [4.7.6.4-git])
 
 m4_define([gtk_minimum_version], [2.10.0])
 m4_define([xfce_minimum_version], [4.6.0])
diff --git a/globaltime/tz_zoneinfo_read.c b/globaltime/tz_zoneinfo_read.c
index f285b0d..8196df8 100644
--- a/globaltime/tz_zoneinfo_read.c
+++ b/globaltime/tz_zoneinfo_read.c
@@ -266,7 +266,7 @@ static void process_abbr_table()
     for (i = 0; i < charcnt; i++) { /* we need to walk over the table */
         if (debug > 3)
             printf("Abbr:%d (%d)(%s)\n", i, (int)strlen((char *)(tmp + i))
-                    , tmp + i);
+                    ,tmp + i);
         i += strlen((char *)(tmp + i));
     }
     in_head += charcnt;
@@ -398,6 +398,8 @@ static int timezone_exists_in_ical()
     else
         return(0); /* not found */
 #else
+    if (!zones_tab_buf)
+        return(0);
     if ((str = strstr(zones_tab_buf, in_timezone_name)))
         return(1); /* yes, it is there */
     else
diff --git a/panel-plugin/tz_zoneinfo_read.c b/panel-plugin/tz_zoneinfo_read.c
index b70a181..8196df8 100644
--- a/panel-plugin/tz_zoneinfo_read.c
+++ b/panel-plugin/tz_zoneinfo_read.c
@@ -265,7 +265,8 @@ static void process_abbr_table()
     tmp = in_head;
     for (i = 0; i < charcnt; i++) { /* we need to walk over the table */
         if (debug > 3)
-            printf("Abbr:%d (%d)(%s)\n", i, strlen((char *)(tmp + i)), tmp + i);
+            printf("Abbr:%d (%d)(%s)\n", i, (int)strlen((char *)(tmp + i))
+                    ,tmp + i);
         i += strlen((char *)(tmp + i));
     }
     in_head += charcnt;
@@ -397,6 +398,8 @@ static int timezone_exists_in_ical()
     else
         return(0); /* not found */
 #else
+    if (!zones_tab_buf)
+        return(0);
     if ((str = strstr(zones_tab_buf, in_timezone_name)))
         return(1); /* yes, it is there */
     else
diff --git a/src/functions.c b/src/functions.c
index 986c8fb..eceb0f8 100644
--- a/src/functions.c
+++ b/src/functions.c
@@ -731,7 +731,7 @@ void orage_select_date(GtkCalendar *cal
     if (cur_year == year && cur_month == month)
         gtk_calendar_select_day(cal, day);
     else {
-        gtk_calendar_select_day(cal, 0); /* needed to avoid illegal day/month */
+        gtk_calendar_select_day(cal, 0); /* need to avoid illegal day/month */
         gtk_calendar_select_month(cal, month, year);
         gtk_calendar_select_day(cal, day);
     }
@@ -805,22 +805,6 @@ OrageRc *orage_rc_file_open(char *fpath, gboolean read_only)
     GKeyFile *grc;
     GError *error = NULL;
 
-    /*
-    if ((rc = xfce_rc_simple_open(fpath, read_only)) == NULL && read_only) {
-        orage_message(-90, "orage_rc_open: Unable to open (read) RC file (%s). Creating it.", fpath);
-        / * let's try to build it * /
-        if ((rc = xfce_rc_simple_open(fpath, FALSE)) == NULL) {
-            / * still failed, can't do more * /
-            orage_message(150, "orage_rc_open: Unable to open (write) RC file (%s).", fpath);
-        }
-    }
-    if (rc) { / * we managed to open it * /
-        orc = g_new(OrageRc, 1);
-        orc->rc = rc;
-    }
-    return(orc);
-    */
-
     grc = g_key_file_new();
     if (g_key_file_load_from_file(grc, (const gchar *)fpath
             , G_KEY_FILE_KEEP_COMMENTS, &error)) { /* success */
@@ -881,13 +865,11 @@ void orage_rc_file_close(OrageRc *orc)
 
 gchar **orage_rc_get_groups(OrageRc *orc)
 {
-    /* return(xfce_rc_get_groups((XfceRc *)orc->rc)); */
     return(g_key_file_get_groups((GKeyFile *)orc->rc, NULL));
 }
 
 void orage_rc_set_group(OrageRc *orc, char *grp)
 {
-    /* xfce_rc_set_group((XfceRc *)orc->rc, grp); */
     g_free((void *)orc->cur_group);
     orc->cur_group = g_strdup(grp);
 }
@@ -896,7 +878,6 @@ void orage_rc_del_group(OrageRc *orc, char *grp)
 {
     GError *error = NULL;
 
-    /* xfce_rc_delete_group((XfceRc *)orc->rc, grp, FALSE); */
     if (!g_key_file_remove_group((GKeyFile *)orc->rc, (const gchar *)grp
                 , &error)) {
         orage_message(150, "orage_rc_del_group: Group remove failed. RC file (%s). group (%s) (%s)", orc->file_name, grp, error->message);
@@ -905,7 +886,6 @@ void orage_rc_del_group(OrageRc *orc, char *grp)
 
 gchar *orage_rc_get_group(OrageRc *orc)
 {
-    /* return(g_strdup(xfce_rc_get_group((XfceRc *)orc->rc))); */
     return(g_strdup(orc->cur_group));
 }
 
@@ -914,7 +894,6 @@ gchar *orage_rc_get_str(OrageRc *orc, char *key, char *def)
     GError *error = NULL;
     gchar *ret;
 
-    /* return(g_strdup(xfce_rc_read_entry((XfceRc *)orc->rc, key, def))); */
     ret = g_key_file_get_string((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, &error);
     if (!ret && error) {
@@ -929,7 +908,6 @@ gint orage_rc_get_int(OrageRc *orc, char *key, gint def)
     GError *error = NULL;
     gint ret;
 
-    /* return(xfce_rc_read_int_entry((XfceRc *)orc->rc, key, def)); */
     ret = g_key_file_get_integer((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, &error);
     if (!ret && error) {
@@ -944,7 +922,6 @@ gboolean orage_rc_get_bool(OrageRc *orc, char *key, gboolean def)
     GError *error = NULL;
     gboolean ret;
 
-    /* return(xfce_rc_read_bool_entry((XfceRc *)orc->rc, key, def)); */
     ret = g_key_file_get_boolean((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, &error);
     if (!ret && error) {
@@ -956,10 +933,6 @@ gboolean orage_rc_get_bool(OrageRc *orc, char *key, gboolean def)
 
 void orage_rc_put_str(OrageRc *orc, char *key, char *val)
 {
-    /*
-    if (val != NULL)
-        xfce_rc_write_entry((XfceRc *)orc->rc, key, val);
-        */
     if (ORAGE_STR_EXISTS(val))
         g_key_file_set_string((GKeyFile *)orc->rc, orc->cur_group
                 , (const gchar *)key, (const gchar *)val);
@@ -967,28 +940,24 @@ void orage_rc_put_str(OrageRc *orc, char *key, char *val)
 
 void orage_rc_put_int(OrageRc *orc, char *key, gint val)
 {
-    /* xfce_rc_write_int_entry((XfceRc *)orc->rc, key, val); */
     g_key_file_set_integer((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, val);
 }
 
 void orage_rc_put_bool(OrageRc *orc, char *key, gboolean val)
 {
-    /* xfce_rc_write_bool_entry((XfceRc *)orc->rc, key, val); */
     g_key_file_set_boolean((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, val);
 }
 
 gboolean orage_rc_exists_item(OrageRc *orc, char *key)
 {
-    /* return(xfce_rc_has_entry((XfceRc *)orc->rc, key)); */
     return(g_key_file_has_key((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, NULL));
 }
 
 void orage_rc_del_item(OrageRc *orc, char *key)
 {
-    /* xfce_rc_delete_entry((XfceRc *)orc->rc, key, FALSE); */
     g_key_file_remove_key((GKeyFile *)orc->rc, orc->cur_group
             , (const gchar *)key, NULL);
 }
diff --git a/src/mainbox.c b/src/mainbox.c
index fc25b68..49a5bea 100644
--- a/src/mainbox.c
+++ b/src/mainbox.c
@@ -168,11 +168,27 @@ static void mView_selectToday_activate_cb(GtkMenuItem *menuitem
     orage_select_today(GTK_CALENDAR(cal->mCalendar));
 }
 
+static void mView_StartGlobaltime_activate_cb(GtkMenuItem *menuitem
+        , gpointer user_data)
+{
+#undef P_N
+#define P_N "mView_StartGlobaltime_activate_cb: "
+    GError *error = NULL;
+
+#ifdef ORAGE_DEBUG
+    orage_message(-100, P_N);
+#endif
+    if (!orage_exec("globaltime", FALSE, &error))
+        orage_message(100, "%s: start of %s failed: %s", "Orage", "globaltime"
+                , error->message);
+}
+
 static void mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
 {
 #undef P_N
 #define P_N "mHelp_help_activate_cb: "
     gchar *helpdoc;
+    GError *error = NULL;
 
 #ifdef ORAGE_DEBUG
     orage_message(-100, P_N);
@@ -183,7 +199,9 @@ static void mHelp_help_activate_cb(GtkMenuItem *menuitem, gpointer user_data)
            , G_DIR_SEPARATOR_S, "C"
            , G_DIR_SEPARATOR_S, "orage.html"
            , NULL);
-    orage_exec(helpdoc, NULL, NULL);
+    if (!orage_exec(helpdoc, FALSE, NULL))
+        orage_message(100, "%s: start of %s failed: %s", "Orage", helpdoc
+                    , error->message);
     g_free(helpdoc);
 }
 
@@ -300,6 +318,12 @@ static void build_menu(void)
             orage_menu_item_new_with_mnemonic(_("Select _Today")
                     , cal->mView_menu);
 
+    menu_separator = orage_separator_menu_item_new(cal->mView_menu);
+
+    cal->mView_StartGlobaltime = 
+            orage_menu_item_new_with_mnemonic(_("Show _Globaltime")
+                    , cal->mView_menu);
+
     /* Help menu */
     cal->mHelp_menu = orage_menu_new(_("_Help"), cal->mMenubar);
     cal->mHelp_help = orage_image_menu_item_new_from_stock("gtk-help"
@@ -326,6 +350,8 @@ static void build_menu(void)
             , G_CALLBACK(mView_ViewSelectedWeek_activate_cb),(gpointer) cal);
     g_signal_connect((gpointer) cal->mView_selectToday, "activate"
             , G_CALLBACK(mView_selectToday_activate_cb),(gpointer) cal);
+    g_signal_connect((gpointer) cal->mView_StartGlobaltime, "activate"
+            , G_CALLBACK(mView_StartGlobaltime_activate_cb),(gpointer) cal);
     g_signal_connect((gpointer) cal->mHelp_help, "activate"
             , G_CALLBACK(mHelp_help_activate_cb), NULL);
     g_signal_connect((gpointer) cal->mHelp_about, "activate"
diff --git a/src/mainbox.h b/src/mainbox.h
index 785960a..edbbd68 100644
--- a/src/mainbox.h
+++ b/src/mainbox.h
@@ -44,6 +44,7 @@ typedef struct _CalWin
     GtkWidget *mView_ViewSelectedDate;
     GtkWidget *mView_ViewSelectedWeek;
     GtkWidget *mView_selectToday;
+    GtkWidget *mView_StartGlobaltime;
     GtkWidget *mHelp_menu;
     GtkWidget *mHelp_help;
     GtkWidget *mHelp_about;
diff --git a/src/tray_icon.c b/src/tray_icon.c
index 67ca49d..fb2d3b2 100644
--- a/src/tray_icon.c
+++ b/src/tray_icon.c
@@ -33,6 +33,8 @@
 #include <gdk/gdk.h>
 #include <gtk/gtk.h>
 #include <glib/gprintf.h>
+#include <gdk/gdkevents.h>
+#include <gdk/gdkx.h>
 
 #include "orage-i18n.h"
 #include "functions.h"
@@ -81,9 +83,55 @@ void on_about_activate(GtkMenuItem *menuitem, gpointer user_data)
     create_wAbout((GtkWidget *)menuitem, user_data);
 }
 
+void on_globaltime_activate(GtkMenuItem *menuitem, gpointer user_data)
+{
+    GError *error = NULL;
+
+    if (!orage_exec("globaltime", FALSE, &error))
+        g_message("%s: start of %s failed: %s", "Orage", "globaltime"
+                , error->message);
+}
+
+gboolean button_press_cb(GtkStatusIcon *status_icon, GdkEventButton *event
+        , gpointer user_data)
+{
+    GdkAtom atom;
+    GdkEventClient gev;
+    Window xwindow;
+
+    if (event->type != GDK_BUTTON_PRESS) /* double or triple click */
+        return(FALSE); /* ignore */
+    else if (event->button == 2) {
+        /* send message to program to check if it is running */
+        atom = gdk_atom_intern("_XFCE_GLOBALTIME_RUNNING", FALSE);
+        if ((xwindow = XGetSelectionOwner(GDK_DISPLAY(),
+                gdk_x11_atom_to_xatom(atom))) != None) { /* yes, then toggle */
+            gev.type = GDK_CLIENT_EVENT;
+            gev.window = NULL;
+            gev.send_event = TRUE;
+            gev.message_type = gdk_atom_intern("_XFCE_GLOBALTIME_TOGGLE_HERE"
+                    , FALSE);
+            gev.data_format = 8;
+
+            if (!gdk_event_send_client_message((GdkEvent *) &gev,
+                    (GdkNativeWindow)xwindow))
+                 g_message("%s: send message to %s failed", "Orage"
+                         , "globaltime");
+
+            return(TRUE);
+        }
+        else { /* not running, let's try to start it. Need to reset TZ! */
+            on_globaltime_activate(NULL, NULL);
+            return(TRUE);
+        }
+    }
+
+    return(FALSE);
+}
+
 void toggle_visible_cb(GtkStatusIcon *status_icon, gpointer user_data)
 {
-    orage_toggle_visible ();
+    orage_toggle_visible();
 }
 
 void show_menu(GtkStatusIcon *status_icon, guint button, guint activate_time
@@ -349,53 +397,53 @@ GtkWidget *create_TrayIcon_menu()
     GtkWidget *menuItem;
 
     trayMenu = gtk_menu_new();
+
     menuItem = gtk_image_menu_item_new_with_mnemonic(_("Today"));
     gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem)
             , gtk_image_new_from_stock(GTK_STOCK_HOME, GTK_ICON_SIZE_MENU));
-    g_signal_connect(menuItem, "activate", G_CALLBACK(on_Today_activate)
-            , xfcal);
+    g_signal_connect(menuItem, "activate"
+            , G_CALLBACK(on_Today_activate), xfcal);
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show_all(menuItem);
+
     menuItem = gtk_separator_menu_item_new();
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
-
     menuItem = gtk_image_menu_item_new_with_label(_("New appointment"));
     gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem)
             , gtk_image_new_from_stock(GTK_STOCK_NEW, GTK_ICON_SIZE_MENU));
     g_signal_connect(menuItem, "activate"
             , G_CALLBACK(on_new_appointment_activate), NULL);
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
+  
     menuItem = gtk_separator_menu_item_new();
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
-  
     menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_PREFERENCES, NULL);
-    g_signal_connect(menuItem, "activate", G_CALLBACK(on_preferences_activate)
-            , NULL);
+    g_signal_connect(menuItem, "activate"
+            , G_CALLBACK(on_preferences_activate), NULL);
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
+
     menuItem = gtk_separator_menu_item_new();
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
-
     menuItem = gtk_image_menu_item_new_with_label(_("About Orage"));
     gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(menuItem)
             , gtk_image_new_from_stock(GTK_STOCK_ABOUT, GTK_ICON_SIZE_MENU));
-    g_signal_connect(menuItem, "activate", G_CALLBACK(on_about_activate)
-            , xfcal);
+    g_signal_connect(menuItem, "activate"
+            , G_CALLBACK(on_about_activate), xfcal);
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
+
     menuItem = gtk_separator_menu_item_new();
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
-
     menuItem = gtk_image_menu_item_new_from_stock(GTK_STOCK_QUIT, NULL);
     g_signal_connect(menuItem, "activate", G_CALLBACK(gtk_main_quit), NULL);
     gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
-    gtk_widget_show(menuItem);
+  
+    menuItem = gtk_separator_menu_item_new();
+    gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
+    menuItem = gtk_image_menu_item_new_with_label(_("Globaltime"));
+    g_signal_connect(menuItem, "activate"
+            , G_CALLBACK(on_globaltime_activate), NULL);
+    gtk_menu_shell_append(GTK_MENU_SHELL(trayMenu), menuItem);
 
+    gtk_widget_show_all(trayMenu);
     return(trayMenu);
 }
 
@@ -422,6 +470,8 @@ GtkStatusIcon* create_TrayIcon(GdkPixbuf *orage_logo)
     g_object_ref(trayIcon);
     g_object_ref_sink(trayIcon);
 
+    g_signal_connect(G_OBJECT(trayIcon), "button-press-event",
+    			   G_CALLBACK(button_press_cb), xfcal);
     g_signal_connect(G_OBJECT(trayIcon), "activate",
     			   G_CALLBACK(toggle_visible_cb), xfcal);
     g_signal_connect(G_OBJECT(trayIcon), "popup_menu",



More information about the Xfce4-commits mailing list