diff --git a/gnome/src/shortcuts.c b/gnome/src/shortcuts.c index 44bb6e5c8cd45ce54bdccf23dcdda60a2e83f781..a51fe01f5eb969895d58cd2d026dbec96427a70b 100644 --- a/gnome/src/shortcuts.c +++ b/gnome/src/shortcuts.c @@ -67,7 +67,8 @@ static GHashTable* shortcutsMap; * filter used when an event is catched */ static GdkFilterReturn -filter_keys(const GdkXEvent *xevent, G_GNUC_UNUSED const GdkEvent *event, G_GNUC_UNUSED gpointer data) +filter_keys(const GdkXEvent *xevent, G_GNUC_UNUSED const GdkEvent *event, + G_GNUC_UNUSED gpointer data) { if (((XEvent *) xevent)->type != KeyPress) return GDK_FILTER_CONTINUE; @@ -75,11 +76,13 @@ filter_keys(const GdkXEvent *xevent, G_GNUC_UNUSED const GdkEvent *event, G_GNUC XKeyEvent *key = (XKeyEvent *) xevent; GdkModifierType keystate = key->state & ~(Mod2Mask | Mod5Mask | LockMask); - for (int i = 0; accelerators_list[i].action; ++i) - if (accelerators_list[i].key == key->keycode && accelerators_list[i].mask == keystate) { + for (guint i = 0; accelerators_list[i].action; ++i) { + if (accelerators_list[i].key == key->keycode && + accelerators_list[i].mask == keystate) { accelerators_list[i].callback(accelerators_list[i].data); return GDK_FILTER_REMOVE; } + } return GDK_FILTER_CONTINUE; } @@ -90,13 +93,13 @@ filter_keys(const GdkXEvent *xevent, G_GNUC_UNUSED const GdkEvent *event, G_GNUC static void toggle_pick_up_hang_up_callback(SFLPhoneClient *client) { - callable_obj_t * selectedCall = calltab_get_selected_call(active_calltree_tab); - conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree_tab); + callable_obj_t *call = calltab_get_selected_call(active_calltree_tab); + conference_obj_t *conf = calltab_get_selected_conf(active_calltree_tab); g_debug("Shortcuts: Toggle pickup/hangup callback"); - if (selectedCall) { - switch (selectedCall->_state) { + if (call) { + switch (call->_state) { case CALL_STATE_INCOMING: case CALL_STATE_TRANSFER: sflphone_pick_up(client); @@ -110,10 +113,11 @@ toggle_pick_up_hang_up_callback(SFLPhoneClient *client) default: break; } - } else if (selectedConf) { - dbus_hang_up_conference(selectedConf); - } else + } else if (conf) { + dbus_hang_up_conference(conf); + } else { sflphone_pick_up(client); + } } static void @@ -131,11 +135,11 @@ hang_up_callback(gpointer data) static void toggle_hold_callback(G_GNUC_UNUSED gpointer data) { - callable_obj_t * selectedCall = calltab_get_selected_call(current_calls_tab); - conference_obj_t * selectedConf = calltab_get_selected_conf(active_calltree_tab); + callable_obj_t *call = calltab_get_selected_call(current_calls_tab); + conference_obj_t *conf = calltab_get_selected_conf(active_calltree_tab); - if (selectedCall) { - switch (selectedCall->_state) { + if (call) { + switch (call->_state) { case CALL_STATE_CURRENT: sflphone_on_hold(); break; @@ -145,9 +149,9 @@ toggle_hold_callback(G_GNUC_UNUSED gpointer data) default: break; } - } else if (selectedConf) - dbus_hold_conference(selectedConf); - else { + } else if (conf) { + dbus_hold_conference(conf); + } else { g_warning("Shortcuts: Error: No callable object selected"); } } @@ -205,16 +209,16 @@ remove_bindings() GdkDisplay *display = gdk_display_get_default(); GdkScreen *screen = gdk_display_get_default_screen(display); - if (screen) { - GdkWindow *root = gdk_screen_get_root_window(screen); - gdk_window_remove_filter(root, (GdkFilterFunc) filter_keys, NULL); + if (!screen) + return; - /* Unbind shortcuts */ - for (int i = 0; accelerators_list[i].action != NULL; ++i) - if (accelerators_list[i].key != 0) - ungrab_key(accelerators_list[i].key, accelerators_list[i].mask, - root); - } + GdkWindow *root = gdk_screen_get_root_window(screen); + gdk_window_remove_filter(root, (GdkFilterFunc) filter_keys, NULL); + + /* Unbind shortcuts */ + for (Accelerator *acl = accelerators_list; acl->action != NULL; ++acl) + if (acl->key != 0) + ungrab_key(acl->key, acl->mask, root); } /* @@ -226,16 +230,16 @@ create_bindings() GdkDisplay *display = gdk_display_get_default(); GdkScreen *screen = gdk_display_get_default_screen(display); - if (screen) { - GdkWindow *root = gdk_screen_get_root_window(screen); - gdk_window_add_filter(root, (GdkFilterFunc) filter_keys, NULL); + if (!screen) + return; - /* bind shortcuts */ - for (int i = 0; accelerators_list[i].action != NULL; ++i) - if (accelerators_list[i].key != 0) - grab_key(accelerators_list[i].key, accelerators_list[i].mask, - root); - } + GdkWindow *root = gdk_screen_get_root_window(screen); + gdk_window_add_filter(root, (GdkFilterFunc) filter_keys, NULL); + + /* bind shortcuts */ + for (Accelerator *acl = accelerators_list; acl->action != NULL; ++acl) + if (acl->key != 0) + grab_key(acl->key, acl->mask, root); } /* @@ -244,15 +248,11 @@ create_bindings() static void initialize_binding(const gchar* action, guint key, GdkModifierType mask) { - int i = 0; + guint i; - while (accelerators_list[i].action != NULL) { - if (g_strcmp0(action, accelerators_list[i].action) == 0) { - break; - } - - i++; - } + for (i = 0; accelerators_list[i].action != NULL && + g_strcmp0(action, accelerators_list[i].action) != 0; ++i) + /* noop */; if (accelerators_list[i].action == NULL) { g_warning("Shortcut: Error: Cannot find corresponding action"); @@ -273,17 +273,14 @@ initialize_binding(const gchar* action, guint key, GdkModifierType mask) static void initialize_accelerators_list(SFLPhoneClient *client) { - GList* shortcutsKeysElement, *shortcutsKeys; - int i = 0; - - shortcutsKeys = g_hash_table_get_keys(shortcutsMap); + GList *shortcutsKeys = g_hash_table_get_keys(shortcutsMap); - accelerators_list = (Accelerator*) malloc( - (g_list_length(shortcutsKeys) + 1) * sizeof(Accelerator)); + /* contains zero-initialized sentinel element at end of list */ + accelerators_list = g_new0(Accelerator, g_list_length(shortcutsKeys) + 1); - for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement - = shortcutsKeysElement->next) { - gchar* action = shortcutsKeysElement->data; + guint i = 0; + for (GList *elem = shortcutsKeys; elem; elem = elem->next) { + gchar* action = elem->data; accelerators_list[i].action = g_strdup(action); accelerators_list[i].callback = get_action_callback(action); @@ -295,12 +292,6 @@ initialize_accelerators_list(SFLPhoneClient *client) } g_list_free(shortcutsKeys); - - // last element must be null - accelerators_list[i].action = 0; - accelerators_list[i].callback = 0; - accelerators_list[i].mask = 0; - accelerators_list[i].key = 0; } static void @@ -314,13 +305,12 @@ update_shortcuts_map(const gchar* action, guint key, GdkModifierType mask) static void update_bindings_data(guint accel_index, guint key, GdkModifierType mask) { - int i = 0; - // we need to be sure this code is not already affected // to another action - while (accelerators_list[i].action != NULL) { - if (accelerators_list[i].key == key && accelerators_list[i].mask == mask - && accelerators_list[i].key != 0) { + for (guint i = 0; accelerators_list[i].action != NULL; ++i) { + if (accelerators_list[i].key == key && + accelerators_list[i].mask == mask && + accelerators_list[i].key != 0) { g_debug("Shortcuts: Existing mapping found %d+%d", mask, key); // disable old binding @@ -330,8 +320,6 @@ update_bindings_data(guint accel_index, guint key, GdkModifierType mask) // update config table update_shortcuts_map(accelerators_list[i].action, 0, 0); } - - i++; } // store new key @@ -352,13 +340,13 @@ update_bindings_data(guint accel_index, guint key, GdkModifierType mask) * Update current bindings with a new value */ void -shortcuts_update_bindings(guint shortcut_index, guint key, GdkModifierType mask) +shortcuts_update_bindings(guint shortcut_idx, guint key, GdkModifierType mask) { // first remove all existing bindings remove_bindings(); // update data - update_bindings_data(shortcut_index, key, mask); + update_bindings_data(shortcut_idx, key, mask); // recreate all bindings create_bindings(); @@ -373,7 +361,6 @@ shortcuts_update_bindings(guint shortcut_index, guint key, GdkModifierType mask) void shortcuts_initialize_bindings(SFLPhoneClient *client) { - GList* shortcutsKeys, *shortcutsKeysElement = NULL; gchar* action, *maskAndKey, *token1, *token2 = NULL; guint mask, key = 0; @@ -386,11 +373,10 @@ shortcuts_initialize_bindings(SFLPhoneClient *client) initialize_accelerators_list(client); // iterate through keys to initialize bindings - shortcutsKeys = g_hash_table_get_keys(shortcutsMap); + GList *shortcutsKeys = g_hash_table_get_keys(shortcutsMap); - for (shortcutsKeysElement = shortcutsKeys; shortcutsKeysElement; shortcutsKeysElement - = shortcutsKeysElement->next) { - action = shortcutsKeysElement->data; + for (GList *elem = shortcutsKeys; elem; elem = elem->next) { + action = elem->data; maskAndKey = g_hash_table_lookup(shortcutsMap, action); token1 = strtok(maskAndKey, "x"); @@ -418,7 +404,6 @@ shortcuts_initialize_bindings(SFLPhoneClient *client) void shortcuts_destroy_bindings() { - int i = 0; if (!accelerators_list) return; @@ -426,16 +411,14 @@ shortcuts_destroy_bindings() remove_bindings(); // free pointers - while (accelerators_list[i].action != NULL) { + for (guint i = 0; accelerators_list[i].action != NULL; ++i) g_free(accelerators_list[i].action); - i++; - } free(accelerators_list); g_hash_table_destroy(shortcutsMap); } -Accelerator* +Accelerator * shortcuts_get_list() { return accelerators_list; @@ -453,7 +436,7 @@ ungrab_key(guint key, GdkModifierType mask, GdkWindow *root) Display *d = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); XID x = GDK_WINDOW_XID(root); - XUngrabKey(d, key, mask | 0, x); + XUngrabKey(d, key, mask , x); XUngrabKey(d, key, mask | Mod2Mask, x); XUngrabKey(d, key, mask | Mod5Mask, x); XUngrabKey(d, key, mask | LockMask, x); @@ -482,7 +465,7 @@ grab_key(guint key, GdkModifierType mask, GdkWindow *root) Display *d = GDK_DISPLAY_XDISPLAY(gdk_display_get_default()); XID x = GDK_WINDOW_XID(root); - XGrabKey(d, key, mask | 0, x, True, GrabModeAsync, GrabModeAsync); + XGrabKey(d, key, mask , x, True, GrabModeAsync, GrabModeAsync); XGrabKey(d, key, mask | Mod2Mask, x, True, GrabModeAsync, GrabModeAsync); XGrabKey(d, key, mask | Mod5Mask, x, True, GrabModeAsync, GrabModeAsync); XGrabKey(d, key, mask | LockMask, x, True, GrabModeAsync, GrabModeAsync);