aboutsummaryrefslogtreecommitdiff
path: root/libdbusmenu-gtk/menuitem.c
diff options
context:
space:
mode:
authorTed Gould <ted@gould.cx>2010-06-09 16:52:24 -0500
committerTed Gould <ted@gould.cx>2010-06-09 16:52:24 -0500
commit9c4988079766e6c5398852b8b7f78188b6aee369 (patch)
tree993b1d887aa879e9f251898945b90a8106871bf5 /libdbusmenu-gtk/menuitem.c
parent8ec651ef62779668b4919e94a32cd6c7868b7609 (diff)
downloadlibdbusmenu-9c4988079766e6c5398852b8b7f78188b6aee369.tar.gz
libdbusmenu-9c4988079766e6c5398852b8b7f78188b6aee369.tar.bz2
libdbusmenu-9c4988079766e6c5398852b8b7f78188b6aee369.zip
Fleshing out building the shortcut array.
Diffstat (limited to 'libdbusmenu-gtk/menuitem.c')
-rw-r--r--libdbusmenu-gtk/menuitem.c48
1 files changed, 45 insertions, 3 deletions
diff --git a/libdbusmenu-gtk/menuitem.c b/libdbusmenu-gtk/menuitem.c
index 8b026e6..1ae4817 100644
--- a/libdbusmenu-gtk/menuitem.c
+++ b/libdbusmenu-gtk/menuitem.c
@@ -27,6 +27,8 @@ License version 3 and version 2.1 along with this program. If not, see
*/
#include "menuitem.h"
+#include <gdk/gdk.h>
+#include <gtk/gtk.h>
/**
dbusmenu_menuitem_property_set_image:
@@ -134,7 +136,7 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar *
@shortcut: String describing the shortcut
This function takes a GTK shortcut string as defined in
- #gtk_accellerator_parse and turns that into the information
+ #gtk_accelerator_parse and turns that into the information
required to send it over DBusmenu.
Return value: Whether it was successful at setting the property.
@@ -142,8 +144,47 @@ dbusmenu_menuitem_property_get_image (DbusmenuMenuitem * menuitem, const gchar *
gboolean
dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gchar * shortcut)
{
+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE);
+ g_return_val_if_fail(shortcut != NULL, FALSE);
+
+ guint key = 0;
+ GdkModifierType modifier = 0;
+
+ gtk_accelerator_parse(shortcut, &key, &modifier);
- return FALSE;
+ if (key == 0) {
+ g_warning("Unable to parse shortcut string '%s'", shortcut);
+ return FALSE;
+ }
+
+ GPtrArray * array = g_ptr_array_new();
+
+ if (modifier & GDK_CONTROL_MASK) {
+ g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_CONTROL));
+ }
+ if (modifier & GDK_MOD1_MASK) {
+ g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_ALT));
+ }
+ if (modifier & GDK_SHIFT_MASK) {
+ g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SHIFT));
+ }
+ if (modifier & GDK_SUPER_MASK) {
+ g_ptr_array_add(array, g_strdup(DBUSMENU_MENUITEM_SHORTCUT_SUPER));
+ }
+
+ gint len = g_utf8_strlen(shortcut, -1);
+ g_ptr_array_add(array, g_strdup(shortcut + len - 1));
+
+ GPtrArray * wrapper = g_ptr_array_new();
+ g_ptr_array_add(wrapper, array);
+
+ GValue value = {0};
+ g_value_init(&value, G_TYPE_BOXED);
+ g_value_set_boxed(&value, wrapper);
+
+ dbusmenu_menuitem_property_set_value(menuitem, DBUSMENU_MENUITEM_PROP_SHORTCUT, &value);
+
+ return TRUE;
}
/**
@@ -151,7 +192,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha
@menuitem: The #DbusmenuMenuitem to get the shortcut off
This function gets a GTK shortcut string as defined in
- #gtk_accellerator_parse from the data that is transferred
+ #gtk_accelerator_parse from the data that is transferred
over DBusmenu.
Return value: Either the string or #NULL if there is none.
@@ -159,6 +200,7 @@ dbusmenu_menuitem_property_set_shortcut (DbusmenuMenuitem * menuitem, const gcha
gchar *
dbusmenu_menuitem_property_get_shortcut (DbusmenuMenuitem * menuitem)
{
+ g_return_val_if_fail(DBUSMENU_IS_MENUITEM(menuitem), FALSE);
return NULL;
}