From 890a69be7f8df0137a55405afe915627599b3808 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 11:56:03 -0600 Subject: Adding a function to get the items that are in the desktop file. --- src/launcher-menu-item.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index 50e8ce6..089402d 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -214,3 +214,9 @@ launcher_menu_item_get_eclipsed (LauncherMenuItem * li) } return FALSE; } + +GList * +launcher_menu_item_get_items (LauncherMenuItem * li) +{ + return NULL; +} -- cgit v1.2.3 From cccb9bc5f977a9d11ec3ee9b9055bbee3b2b6738 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:02:23 -0600 Subject: Adding in shortcuts and ids private variables. Full lifecycle. --- src/launcher-menu-item.c | 36 ++++++++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 6 deletions(-) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index 089402d..238c4cf 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -27,6 +27,7 @@ with this program. If not, see . #include #include #include +#include #include "launcher-menu-item.h" #include "dbus-data.h" @@ -42,6 +43,8 @@ struct _LauncherMenuItemPrivate { GAppInfo * appinfo; gchar * desktop; + IndicatorDesktopShortcuts * ids; + GList * shortcuts; }; #define LAUNCHER_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), LAUNCHER_MENU_ITEM_TYPE, LauncherMenuItemPrivate)) @@ -86,20 +89,21 @@ launcher_menu_item_init (LauncherMenuItem *self) priv->appinfo = NULL; priv->desktop = NULL; + priv->ids = NULL; + priv->shortcuts = NULL; + return; } static void -launcher_menu_item_dispose (GObject *object) +func_unref (gpointer data, gpointer user_data) { - // LauncherMenuItem * self = LAUNCHER_MENU_ITEM(object); - // LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(self); - - G_OBJECT_CLASS (launcher_menu_item_parent_class)->dispose (object); + g_object_unref(G_OBJECT(data)); + return; } static void -launcher_menu_item_finalize (GObject *object) +launcher_menu_item_dispose (GObject *object) { LauncherMenuItem * self = LAUNCHER_MENU_ITEM(object); LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(self); @@ -109,6 +113,26 @@ launcher_menu_item_finalize (GObject *object) priv->appinfo = NULL; } + if (priv->ids != NULL) { + g_object_unref(priv->ids); + priv->ids = NULL; + } + + if (priv->shortcuts != NULL) { + g_list_foreach(priv->shortcuts, func_unref, NULL); + g_list_free(priv->shortcuts); + priv->shortcuts = NULL; + } + + G_OBJECT_CLASS (launcher_menu_item_parent_class)->dispose (object); +} + +static void +launcher_menu_item_finalize (GObject *object) +{ + LauncherMenuItem * self = LAUNCHER_MENU_ITEM(object); + LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(self); + if (priv->desktop != NULL) { g_free(priv->desktop); priv->desktop = NULL; -- cgit v1.2.3 From 379d88af9fd622801b4143169ec44c867d5cd533 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:31:25 -0600 Subject: Build us some shortcut menuitems --- src/launcher-menu-item.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index 238c4cf..c186e45 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -55,6 +55,7 @@ static void launcher_menu_item_init (LauncherMenuItem *self); static void launcher_menu_item_dispose (GObject *object); static void launcher_menu_item_finalize (GObject *object); static void activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data); +static void nick_activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data); G_DEFINE_TYPE (LauncherMenuItem, launcher_menu_item, DBUSMENU_TYPE_MENUITEM); @@ -151,9 +152,12 @@ launcher_menu_item_new (const gchar * desktop_file) LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(self); + /* Parse the desktop file we've been given. */ priv->appinfo = G_APP_INFO(g_desktop_app_info_new_from_filename(desktop_file)); priv->desktop = g_strdup(desktop_file); + /* Set the appropriate values on this menu item based on the + app info that we've parsed */ g_debug("\tName: %s", launcher_menu_item_get_name(self)); dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, LAUNCHER_MENUITEM_TYPE); dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), LAUNCHER_MENUITEM_PROP_APP_NAME, launcher_menu_item_get_name(self)); @@ -161,6 +165,21 @@ launcher_menu_item_new (const gchar * desktop_file) g_signal_connect(G_OBJECT(self), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), NULL); + /* Start to build static shortcuts */ + priv->ids = indicator_desktop_shortcuts_new(priv->desktop, "Messaging Menu"); + const gchar ** nicks = indicator_desktop_shortcuts_get_nicks(priv->ids); + gint i; + for (i = 0; nicks[i] != NULL; i++) { + DbusmenuMenuitem * mi = dbusmenu_menuitem_new(); + g_object_set_data(G_OBJECT(mi), "ids-nick", (gpointer)nicks[i]); + + dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, indicator_desktop_shortcuts_nick_get_name(priv->ids, nicks[i])); + g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(nick_activate_cb), self); + + priv->shortcuts = g_list_append(priv->shortcuts, mi); + } + + /* Check to see if we should be eclipsed */ if (priv->appinfo == NULL) { launcher_menu_item_set_eclipsed(self, TRUE); } @@ -180,6 +199,13 @@ launcher_menu_item_get_name (LauncherMenuItem * appitem) } } +/* Respond to one of the shortcuts getting clicked on. */ +static void +nick_activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data) +{ + +} + /* When the menu item is clicked on it tries to launch the application that is represented by the desktop file */ static void -- cgit v1.2.3 From ca4026eca162910c907fb3224658491335bd98cf Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:39:01 -0600 Subject: Responding to clicking on the shortcuts --- src/launcher-menu-item.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index c186e45..f24dfa9 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -49,6 +49,8 @@ struct _LauncherMenuItemPrivate #define LAUNCHER_MENU_ITEM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), LAUNCHER_MENU_ITEM_TYPE, LauncherMenuItemPrivate)) +#define NICK_DATA "ids-nick-data" + /* Prototypes */ static void launcher_menu_item_class_init (LauncherMenuItemClass *klass); static void launcher_menu_item_init (LauncherMenuItem *self); @@ -171,7 +173,7 @@ launcher_menu_item_new (const gchar * desktop_file) gint i; for (i = 0; nicks[i] != NULL; i++) { DbusmenuMenuitem * mi = dbusmenu_menuitem_new(); - g_object_set_data(G_OBJECT(mi), "ids-nick", (gpointer)nicks[i]); + g_object_set_data(G_OBJECT(mi), NICK_DATA, (gpointer)nicks[i]); dbusmenu_menuitem_property_set(mi, DBUSMENU_MENUITEM_PROP_LABEL, indicator_desktop_shortcuts_nick_get_name(priv->ids, nicks[i])); g_signal_connect(G_OBJECT(mi), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(nick_activate_cb), self); @@ -203,7 +205,21 @@ launcher_menu_item_get_name (LauncherMenuItem * appitem) static void nick_activate_cb (LauncherMenuItem * self, guint timestamp, gpointer data) { + gchar * nick = (gchar *)g_object_get_data(G_OBJECT(self), NICK_DATA); + LauncherMenuItem * lmi = LAUNCHER_MENU_ITEM(data); + + g_return_if_fail(nick != NULL); + g_return_if_fail(lmi != NULL); + + LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(lmi); + + g_return_if_fail(priv->ids != NULL); + if (!indicator_desktop_shortcuts_nick_exec(priv->ids, nick)) { + g_warning("Unable to execute nick '%s' for desktop file '%s'", nick, priv->desktop); + } + + return; } /* When the menu item is clicked on it tries to launch -- cgit v1.2.3 From 05436b2d6a483ea791b5a1ec396493ed08830b25 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:45:44 -0600 Subject: Making visible use boolean properties. --- src/launcher-menu-item.c | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index f24dfa9..a65aed0 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -263,22 +263,16 @@ void launcher_menu_item_set_eclipsed (LauncherMenuItem * li, gboolean eclipsed) { g_debug("Laucher '%s' is %s", launcher_menu_item_get_name(li), eclipsed ? "now eclipsed" : "shown again"); - dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(li), DBUSMENU_MENUITEM_PROP_VISIBLE, eclipsed ? "false" : "true"); + dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(li), DBUSMENU_MENUITEM_PROP_VISIBLE, !eclipsed); return; } gboolean launcher_menu_item_get_eclipsed (LauncherMenuItem * li) { - const gchar * show = dbusmenu_menuitem_property_get(DBUSMENU_MENUITEM(li), DBUSMENU_MENUITEM_PROP_VISIBLE); - if (show == NULL) { - return FALSE; - } - g_debug("Launcher check eclipse: %s", show); - if (!g_strcmp0(show, "false")) { - return TRUE; - } - return FALSE; + gboolean show = dbusmenu_menuitem_property_get_bool(DBUSMENU_MENUITEM(li), DBUSMENU_MENUITEM_PROP_VISIBLE); + g_debug("Launcher check eclipse: %s", show ? "false" : "true"); + return !show; } GList * -- cgit v1.2.3 From 5da2f0c0661f6d5ebced459ec677aa86441894b0 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:50:12 -0600 Subject: Applying the eclipsed value to the shortcuts that are associted with this launcher. --- src/launcher-menu-item.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index a65aed0..e961573 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -257,13 +257,32 @@ launcher_menu_item_get_description (LauncherMenuItem * li) return g_app_info_get_description(priv->appinfo); } +/* Apply the eclipse value to all the shortcuts */ +static void +eclipse_shortcuts_cb (gpointer data, gpointer user_data) +{ + DbusmenuMenuitem * mi = DBUSMENU_MENUITEM(data); + g_return_if_fail(mi != NULL); + + gboolean eclipsed = GPOINTER_TO_UINT(user_data); + + dbusmenu_menuitem_property_set_bool(mi, DBUSMENU_MENUITEM_PROP_VISIBLE, !eclipsed); + return; +} + /* Hides the menu item based on whether it is eclipsed or not. */ void launcher_menu_item_set_eclipsed (LauncherMenuItem * li, gboolean eclipsed) { + g_return_if_fail(IS_LAUNCHER_MENU_ITEM(li)); + LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(li); + g_debug("Laucher '%s' is %s", launcher_menu_item_get_name(li), eclipsed ? "now eclipsed" : "shown again"); dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(li), DBUSMENU_MENUITEM_PROP_VISIBLE, !eclipsed); + + g_list_foreach(priv->shortcuts, eclipse_shortcuts_cb, GINT_TO_POINTER(eclipsed)); + return; } -- cgit v1.2.3 From 3d07cf168800200269449e1d5d2b3e682c8fc033 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 12:53:03 -0600 Subject: Fleshing out the get_items function --- src/launcher-menu-item.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index e961573..d542e11 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -286,6 +286,7 @@ launcher_menu_item_set_eclipsed (LauncherMenuItem * li, gboolean eclipsed) return; } +/* Check to see if this item is eclipsed */ gboolean launcher_menu_item_get_eclipsed (LauncherMenuItem * li) { @@ -294,8 +295,12 @@ launcher_menu_item_get_eclipsed (LauncherMenuItem * li) return !show; } +/* Gets the shortcuts that are associated with this + launcher. They're a list of DbusmenuMenuitems */ GList * launcher_menu_item_get_items (LauncherMenuItem * li) { - return NULL; + g_return_val_if_fail(IS_LAUNCHER_MENU_ITEM(li), NULL); + LauncherMenuItemPrivate * priv = LAUNCHER_MENU_ITEM_GET_PRIVATE(li); + return priv->shortcuts; } -- cgit v1.2.3 From abedb35f468b736aaa4d6f53b8270adb3109e107 Mon Sep 17 00:00:00 2001 From: Ted Gould Date: Wed, 17 Feb 2010 13:40:20 -0600 Subject: Explicitly setting the visible property so we call pull it later. --- src/launcher-menu-item.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src/launcher-menu-item.c') diff --git a/src/launcher-menu-item.c b/src/launcher-menu-item.c index d542e11..d6386a3 100644 --- a/src/launcher-menu-item.c +++ b/src/launcher-menu-item.c @@ -164,6 +164,7 @@ launcher_menu_item_new (const gchar * desktop_file) dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_TYPE, LAUNCHER_MENUITEM_TYPE); dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), LAUNCHER_MENUITEM_PROP_APP_NAME, launcher_menu_item_get_name(self)); dbusmenu_menuitem_property_set(DBUSMENU_MENUITEM(self), LAUNCHER_MENUITEM_PROP_APP_DESC, launcher_menu_item_get_description(self)); + dbusmenu_menuitem_property_set_bool(DBUSMENU_MENUITEM(self), DBUSMENU_MENUITEM_PROP_VISIBLE, TRUE); g_signal_connect(G_OBJECT(self), DBUSMENU_MENUITEM_SIGNAL_ITEM_ACTIVATED, G_CALLBACK(activate_cb), NULL); -- cgit v1.2.3