This is an automated email from the git hooks/post-receive script. nomad pushed a commit to annotated tag 0.2.2 in repository apps/xfdashboard.
commit f63b5d3c88fd575100d6ca11eb633631ae2de744 Author: Stephan Haller <[email protected]> Date: Tue Aug 12 20:35:24 2014 +0200 Split key handling function into "specialized" functions Split key handling function in XfdashboardFocusable into "specialized" functions for 'key-press' and 'key-release' events. This make handling repeative 'key-press' event easier and cleaner (code), e.g. for moving selection when key is pressed and hold pressed. 'key-release' is only called once when pressed key is released. --- src/applications-view.c | 75 +++++++++------ src/focus-manager.c | 24 ++++- src/focusable.c | 78 +++++++++++++-- src/focusable.h | 5 +- src/quicklaunch.c | 104 +++++++++++--------- src/search-view.c | 88 ++++++++++------- src/text-box.c | 75 ++++++++++----- src/viewpad.c | 45 ++++++++- src/windows-view.c | 238 ++++++++++++++++++++++++---------------------- src/workspace-selector.c | 101 ++++++++++++-------- 10 files changed, 530 insertions(+), 303 deletions(-) diff --git a/src/applications-view.c b/src/applications-view.c index 3ee648b..0abfd2b 100644 --- a/src/applications-view.c +++ b/src/applications-view.c @@ -667,8 +667,8 @@ static gboolean _xfdashboard_applications_view_focusable_handle_key_event_at_lis return(CLUTTER_EVENT_STOP); } -static gboolean _xfdashboard_applications_view_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +static gboolean _xfdashboard_applications_view_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardApplicationsView *self; XfdashboardApplicationsViewPrivate *priv; @@ -680,40 +680,52 @@ static gboolean _xfdashboard_applications_view_focusable_handle_key_event(Xfdash self=XFDASHBOARD_APPLICATIONS_VIEW(inFocusable); priv=self->priv; - /* Handle key events when key was released */ - if(clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE) + /* Move selection if an arrow key was pressed */ + if(priv->viewMode==XFDASHBOARD_VIEW_MODE_LIST) { - /* Start selected application on ENTER */ - switch(inEvent->key.keyval) + handledEvent=_xfdashboard_applications_view_focusable_handle_key_event_at_list_mode(self, inEvent); + } + else { - case CLUTTER_KEY_Return: - case CLUTTER_KEY_KP_Enter: - case CLUTTER_KEY_ISO_Enter: - if(priv->selectedItem) - { - if(XFDASHBOARD_IS_APPLICATION_BUTTON(priv->selectedItem)) - { - _xfdashboard_applications_view_on_item_clicked(self, XFDASHBOARD_APPLICATION_BUTTON(priv->selectedItem)); - } - else if(XFDASHBOARD_IS_BUTTON(priv->selectedItem)) - { - _xfdashboard_applications_view_on_parent_menu_clicked(self, XFDASHBOARD_BUTTON(priv->selectedItem)); - } - } - return(CLUTTER_EVENT_STOP); + handledEvent=_xfdashboard_applications_view_focusable_handle_key_event_at_icon_mode(self, inEvent); } - /* Move selection if an arrow key was pressed */ - if(priv->viewMode==XFDASHBOARD_VIEW_MODE_LIST) - { - handledEvent=_xfdashboard_applications_view_focusable_handle_key_event_at_list_mode(self, inEvent); - } - else + if(handledEvent==CLUTTER_EVENT_STOP) return(handledEvent); + + /* We did not handle this event */ + return(CLUTTER_EVENT_PROPAGATE); +} + +static gboolean _xfdashboard_applications_view_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardApplicationsView *self; + XfdashboardApplicationsViewPrivate *priv; + + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_APPLICATIONS_VIEW(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_APPLICATIONS_VIEW(inFocusable); + priv=self->priv; + + /* Start selected application on ENTER */ + switch(inEvent->key.keyval) + { + case CLUTTER_KEY_Return: + case CLUTTER_KEY_KP_Enter: + case CLUTTER_KEY_ISO_Enter: + if(priv->selectedItem) { - handledEvent=_xfdashboard_applications_view_focusable_handle_key_event_at_icon_mode(self, inEvent); + if(XFDASHBOARD_IS_APPLICATION_BUTTON(priv->selectedItem)) + { + _xfdashboard_applications_view_on_item_clicked(self, XFDASHBOARD_APPLICATION_BUTTON(priv->selectedItem)); + } + else if(XFDASHBOARD_IS_BUTTON(priv->selectedItem)) + { + _xfdashboard_applications_view_on_parent_menu_clicked(self, XFDASHBOARD_BUTTON(priv->selectedItem)); + } } - - if(handledEvent==CLUTTER_EVENT_STOP) return(handledEvent); + return(CLUTTER_EVENT_STOP); } /* We did not handle this event */ @@ -728,7 +740,8 @@ void _xfdashboard_applications_view_focusable_iface_init(XfdashboardFocusableInt iface->can_focus=_xfdashboard_applications_view_focusable_can_focus; iface->set_focus=_xfdashboard_applications_view_focusable_set_focus; iface->unset_focus=_xfdashboard_applications_view_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_applications_view_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_applications_view_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_applications_view_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ diff --git a/src/focus-manager.c b/src/focus-manager.c index 27ee3b7..8f623f6 100644 --- a/src/focus-manager.c +++ b/src/focus-manager.c @@ -580,7 +580,29 @@ gboolean xfdashboard_focus_manager_handle_key_event(XfdashboardFocusManager *sel /* Synthesize event for current focused focusable actor */ if(priv->currentFocus) { - return(xfdashboard_focusable_handle_key_event(priv->currentFocus, inEvent)); + gboolean handled; + + handled=CLUTTER_EVENT_PROPAGATE; + + /* Try handler function depending on key event type */ + switch(clutter_event_type(inEvent)) + { + case CLUTTER_KEY_PRESS: + handled=xfdashboard_focusable_handle_keypress_event(priv->currentFocus, inEvent); + break; + + case CLUTTER_KEY_RELEASE: + handled=xfdashboard_focusable_handle_keyrelease_event(priv->currentFocus, inEvent); + break; + + default: + /* We should never get here */ + g_assert_not_reached(); + break; + } + + /* Return handling result */ + return(handled); } /* If we get here there is no focus set */ diff --git a/src/focusable.c b/src/focusable.c index 9e43752..7f6332b 100644 --- a/src/focusable.c +++ b/src/focusable.c @@ -61,8 +61,18 @@ static void _xfdashboard_focusable_real_unset_focus(XfdashboardFocusable *self) /* By default (if not overidden) do nothing */ } -/* Default implementation of virtual function "handle_key_event" */ -static gboolean _xfdashboard_focusable_real_handle_key_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) +/* Default implementation of virtual function "handle_keypress_event" */ +static gboolean _xfdashboard_focusable_real_handle_keypress_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) +{ + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(CLUTTER_IS_ACTOR(self), CLUTTER_EVENT_PROPAGATE); + + /* By default synthesize event to focusable actor */ + return(clutter_actor_event(CLUTTER_ACTOR(self), inEvent, FALSE)); +} + +/* Default implementation of virtual function "handle_keyrelease_event" */ +static gboolean _xfdashboard_focusable_real_handle_keyrelease_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) { g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), CLUTTER_EVENT_PROPAGATE); g_return_val_if_fail(CLUTTER_IS_ACTOR(self), CLUTTER_EVENT_PROPAGATE); @@ -86,7 +96,8 @@ void xfdashboard_focusable_default_init(XfdashboardFocusableInterface *iface) */ iface->can_focus=_xfdashboard_focusable_real_can_focus; iface->unset_focus=_xfdashboard_focusable_real_unset_focus; - iface->handle_key_event=_xfdashboard_focusable_real_handle_key_event; + iface->handle_keypress_event=_xfdashboard_focusable_real_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_focusable_real_handle_keyrelease_event; } /* Implementation: Public API */ @@ -151,22 +162,71 @@ void xfdashboard_focusable_unset_focus(XfdashboardFocusable *self) XFDASHBOARD_FOCUSABLE_WARN_NOT_IMPLEMENTED(self, "unset_focus"); } -/* Call virtual function "handle_key_event" */ +/* Call key handling function depending on key event type */ gboolean xfdashboard_focusable_handle_key_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) { + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(inEvent, CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(clutter_event_type(inEvent)==CLUTTER_KEY_PRESS || + clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE, CLUTTER_EVENT_PROPAGATE); + + switch(clutter_event_type(inEvent)) + { + case CLUTTER_KEY_PRESS: + return(xfdashboard_focusable_handle_keypress_event(self, inEvent)); + + case CLUTTER_KEY_RELEASE: + return(xfdashboard_focusable_handle_keyrelease_event(self, inEvent)); + + default: + /* We should never get here */ + g_assert_not_reached(); + break; + } + + return(CLUTTER_EVENT_PROPAGATE); +} + +/* Call virtual function "handle_keypress_event" */ +gboolean xfdashboard_focusable_handle_keypress_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) +{ XfdashboardFocusableInterface *iface; - g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), FALSE); + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(inEvent, CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(clutter_event_type(inEvent)==CLUTTER_KEY_PRESS, CLUTTER_EVENT_PROPAGATE); iface=XFDASHBOARD_FOCUSABLE_GET_IFACE(self); /* Call virtual function */ - if(iface->handle_key_event) + if(iface->handle_keypress_event) { - return(iface->handle_key_event(self, inEvent)); + return(iface->handle_keypress_event(self, inEvent)); } /* If we get here the virtual function was not overridden */ - XFDASHBOARD_FOCUSABLE_WARN_NOT_IMPLEMENTED(self, "handle_key_event"); - return(FALSE); + XFDASHBOARD_FOCUSABLE_WARN_NOT_IMPLEMENTED(self, "handle_keypress_event"); + return(CLUTTER_EVENT_PROPAGATE); +} + +/* Call virtual function "handle_keypress_event" */ +gboolean xfdashboard_focusable_handle_keyrelease_event(XfdashboardFocusable *self, const ClutterEvent *inEvent) +{ + XfdashboardFocusableInterface *iface; + + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(self), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(inEvent, CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE, CLUTTER_EVENT_PROPAGATE); + + iface=XFDASHBOARD_FOCUSABLE_GET_IFACE(self); + + /* Call virtual function */ + if(iface->handle_keyrelease_event) + { + return(iface->handle_keyrelease_event(self, inEvent)); + } + + /* If we get here the virtual function was not overridden */ + XFDASHBOARD_FOCUSABLE_WARN_NOT_IMPLEMENTED(self, "handle_keyrelease_event"); + return(CLUTTER_EVENT_PROPAGATE); } diff --git a/src/focusable.h b/src/focusable.h index e75ea1a..c25d86d 100644 --- a/src/focusable.h +++ b/src/focusable.h @@ -49,7 +49,8 @@ struct _XfdashboardFocusableInterface void (*set_focus)(XfdashboardFocusable *self); void (*unset_focus)(XfdashboardFocusable *self); - gboolean (*handle_key_event)(XfdashboardFocusable *self, const ClutterEvent *inEvent); + gboolean (*handle_keypress_event)(XfdashboardFocusable *self, const ClutterEvent *inEvent); + gboolean (*handle_keyrelease_event)(XfdashboardFocusable *self, const ClutterEvent *inEvent); }; /* Public API */ @@ -60,6 +61,8 @@ void xfdashboard_focusable_set_focus(XfdashboardFocusable *self); void xfdashboard_focusable_unset_focus(XfdashboardFocusable *self); gboolean xfdashboard_focusable_handle_key_event(XfdashboardFocusable *self, const ClutterEvent *inEvent); +gboolean xfdashboard_focusable_handle_keypress_event(XfdashboardFocusable *self, const ClutterEvent *inEvent); +gboolean xfdashboard_focusable_handle_keyrelease_event(XfdashboardFocusable *self, const ClutterEvent *inEvent); G_END_DECLS diff --git a/src/quicklaunch.c b/src/quicklaunch.c index ea1b55a..eac4c6e 100644 --- a/src/quicklaunch.c +++ b/src/quicklaunch.c @@ -1455,9 +1455,9 @@ static void _xfdashboard_quicklaunch_focusable_unset_focus(XfdashboardFocusable } } -/* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_quicklaunch_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +/* Virtual function "handle_keypress_event" was called */ +static gboolean _xfdashboard_quicklaunch_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardQuicklaunch *self; XfdashboardQuicklaunchPrivate *priv; @@ -1469,17 +1469,35 @@ static gboolean _xfdashboard_quicklaunch_focusable_handle_key_event(XfdashboardF self=XFDASHBOARD_QUICKLAUNCH(inFocusable); priv=self->priv; - /* Handle key events when key was released */ - if(clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE) + /* Move selection if an arrow key was pressed which makes sense + * for orientation set + */ + if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Up) || + (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Left)) { - /* Move selection if an arrow key was pressed which makes sense - * for orientation set - */ - if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Up) || - (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Left)) + /* Find previous item to select and set style to it but also unstyle previous one */ + newItem=xfdashboard_quicklaunch_get_previous_selectable(self, priv->selectedItem); + if(newItem && newItem!=priv->selectedItem) + { + /* Unset current selected item if any */ + if(priv->selectedItem) + { + xfdashboard_stylable_remove_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + } + + /* Set new current selected item */ + priv->selectedItem=newItem; + xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + } + + /* Event handled */ + return(CLUTTER_EVENT_STOP); + } + else if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Down) || + (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Right)) { - /* Find previous item to select and set style to it but also unstyle previous one */ - newItem=xfdashboard_quicklaunch_get_previous_selectable(self, priv->selectedItem); + /* Find next item to select and set style to it but also unstyle previous one */ + newItem=xfdashboard_quicklaunch_get_next_selectable(self, priv->selectedItem); if(newItem && newItem!=priv->selectedItem) { /* Unset current selected item if any */ @@ -1496,42 +1514,37 @@ static gboolean _xfdashboard_quicklaunch_focusable_handle_key_event(XfdashboardF /* Event handled */ return(CLUTTER_EVENT_STOP); } - else if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Down) || - (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Right)) - { - /* Find next item to select and set style to it but also unstyle previous one */ - newItem=xfdashboard_quicklaunch_get_next_selectable(self, priv->selectedItem); - if(newItem && newItem!=priv->selectedItem) - { - /* Unset current selected item if any */ - if(priv->selectedItem) - { - xfdashboard_stylable_remove_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); - } - - /* Set new current selected item */ - priv->selectedItem=newItem; - xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); - } - /* Event handled */ - return(CLUTTER_EVENT_STOP); - } + /* We did not handle this event */ + return(CLUTTER_EVENT_PROPAGATE); +} - /* Activate workspace on ENTER */ - if(inEvent->key.keyval==CLUTTER_KEY_Return || - inEvent->key.keyval==CLUTTER_KEY_KP_Enter || - inEvent->key.keyval==CLUTTER_KEY_ISO_Enter) - { - /* Emit "clicked" signal at selected item */ - if(priv->selectedItem) - { - g_signal_emit_by_name(priv->selectedItem, "clicked"); - } +/* Virtual function "handle_keyrelease_event" was called */ +static gboolean _xfdashboard_quicklaunch_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardQuicklaunch *self; + XfdashboardQuicklaunchPrivate *priv; - /* Event handled */ - return(CLUTTER_EVENT_STOP); + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_QUICKLAUNCH(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_QUICKLAUNCH(inFocusable); + priv=self->priv; + + /* Activate selected icon on ENTER */ + if(inEvent->key.keyval==CLUTTER_KEY_Return || + inEvent->key.keyval==CLUTTER_KEY_KP_Enter || + inEvent->key.keyval==CLUTTER_KEY_ISO_Enter) + { + /* Emit "clicked" signal at selected item */ + if(priv->selectedItem) + { + g_signal_emit_by_name(priv->selectedItem, "clicked"); } + + /* Event handled */ + return(CLUTTER_EVENT_STOP); } /* We did not handle this event */ @@ -1545,7 +1558,8 @@ void _xfdashboard_quicklaunch_focusable_iface_init(XfdashboardFocusableInterface { iface->set_focus=_xfdashboard_quicklaunch_focusable_set_focus; iface->unset_focus=_xfdashboard_quicklaunch_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_quicklaunch_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_quicklaunch_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_quicklaunch_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ diff --git a/src/search-view.c b/src/search-view.c index 935b271..de6f6ab 100644 --- a/src/search-view.c +++ b/src/search-view.c @@ -754,8 +754,8 @@ static void _xfdashboard_search_view_focusable_unset_focus(XfdashboardFocusable } /* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_search_view_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +static gboolean _xfdashboard_search_view_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardSearchView *self; XfdashboardSearchViewPrivate *priv; @@ -770,38 +770,12 @@ static gboolean _xfdashboard_search_view_focusable_handle_key_event(XfdashboardF /* Handle key events at container of selected provider */ if(priv->selectionProvider && - priv->selectionProvider->container && - clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE) + priv->selectionProvider->container) { - ClutterActor *currentSelection; ClutterActor *newSelection; gboolean doGetPrevious; gint selectionDirection; - /* Emit click on current selection when ENTER was pressed */ - switch(inEvent->key.keyval) - { - case CLUTTER_KEY_Return: - case CLUTTER_KEY_KP_Enter: - case CLUTTER_KEY_ISO_Enter: - /* Get current selection to lookup mapping */ - currentSelection=xfdashboard_search_result_container_get_current_selection(XFDASHBOARD_SEARCH_RESULT_CONTAINER(priv->selectionProvider->container)); - if(currentSelection) - { - XfdashboardSearchViewProviderItemsMapping *mapping; - - /* Get mapping of current selection to determine actor where to emit click action */ - mapping=_xfdashboard_search_view_provider_data_get_mapping_by_actor(priv->selectionProvider, currentSelection); - if(mapping) - { - _xfdashboard_search_view_on_provider_item_actor_clicked(XFDASHBOARD_CLICK_ACTION(mapping->clickAction), - mapping->actor, - mapping); - } - } - return(CLUTTER_EVENT_STOP); - } - /* Move selection if an corresponding key was pressed */ switch(inEvent->key.keyval) { @@ -835,9 +809,6 @@ static gboolean _xfdashboard_search_view_focusable_handle_key_event(XfdashboardF if(handledEvent==CLUTTER_EVENT_STOP) { - /* Get current selection to determine if selection has changed */ - currentSelection=xfdashboard_search_result_container_get_current_selection(XFDASHBOARD_SEARCH_RESULT_CONTAINER(priv->selectionProvider->container)); - /* Get new selection */ if(doGetPrevious) { @@ -916,6 +887,56 @@ static gboolean _xfdashboard_search_view_focusable_handle_key_event(XfdashboardF return(handledEvent); } +/* Virtual function "handle_keyrelease_event" was called */ +static gboolean _xfdashboard_search_view_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardSearchView *self; + XfdashboardSearchViewPrivate *priv; + gboolean handledEvent; + + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_SEARCH_VIEW(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_SEARCH_VIEW(inFocusable); + priv=self->priv; + handledEvent=CLUTTER_EVENT_PROPAGATE; + + /* Handle key events at container of selected provider */ + if(priv->selectionProvider && + priv->selectionProvider->container) + { + ClutterActor *currentSelection; + + /* Emit click on current selection when ENTER was pressed */ + switch(inEvent->key.keyval) + { + case CLUTTER_KEY_Return: + case CLUTTER_KEY_KP_Enter: + case CLUTTER_KEY_ISO_Enter: + /* Get current selection to lookup mapping */ + currentSelection=xfdashboard_search_result_container_get_current_selection(XFDASHBOARD_SEARCH_RESULT_CONTAINER(priv->selectionProvider->container)); + if(currentSelection) + { + XfdashboardSearchViewProviderItemsMapping *mapping; + + /* Get mapping of current selection to determine actor where to emit click action */ + mapping=_xfdashboard_search_view_provider_data_get_mapping_by_actor(priv->selectionProvider, currentSelection); + if(mapping) + { + _xfdashboard_search_view_on_provider_item_actor_clicked(XFDASHBOARD_CLICK_ACTION(mapping->clickAction), + mapping->actor, + mapping); + } + } + return(CLUTTER_EVENT_STOP); + } + } + + /* Return result of key handling */ + return(handledEvent); +} + /* Interface initialization * Set up default functions */ @@ -924,7 +945,8 @@ void _xfdashboard_search_view_focusable_iface_init(XfdashboardFocusableInterface iface->can_focus=_xfdashboard_search_view_focusable_can_focus; iface->set_focus=_xfdashboard_search_view_focusable_set_focus; iface->unset_focus=_xfdashboard_search_view_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_search_view_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_search_view_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_search_view_focusable_handle_keyrelease_event; } diff --git a/src/text-box.c b/src/text-box.c index 1664121..6f4ef3a 100644 --- a/src/text-box.c +++ b/src/text-box.c @@ -490,30 +490,6 @@ static gboolean _xfdashboard_text_box_focusable_can_focus(XfdashboardFocusable * return(FALSE); } -/* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_text_box_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) -{ - XfdashboardTextBox *self; - XfdashboardTextBoxPrivate *priv; - gboolean result; - - g_return_val_if_fail(XFDASHBOARD_IS_TEXT_BOX(inFocusable), CLUTTER_EVENT_PROPAGATE); - - self=XFDASHBOARD_TEXT_BOX(inFocusable); - priv=self->priv; - result=CLUTTER_EVENT_PROPAGATE; - - /* Push event to real text box if available */ - if(priv->actorTextBox) - { - result=clutter_actor_event(priv->actorTextBox, inEvent, FALSE); - } - - /* Return event handling result */ - return(result); -} - /* Set focus to actor */ static void _xfdashboard_text_box_focusable_set_focus(XfdashboardFocusable *inFocusable) { @@ -584,6 +560,54 @@ static void _xfdashboard_text_box_focusable_unset_focus(XfdashboardFocusable *in clutter_stage_set_key_focus(stage, NULL); } +/* Virtual function "handle_keypress_event" was called */ +static gboolean _xfdashboard_text_box_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardTextBox *self; + XfdashboardTextBoxPrivate *priv; + gboolean result; + + g_return_val_if_fail(XFDASHBOARD_IS_TEXT_BOX(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_TEXT_BOX(inFocusable); + priv=self->priv; + result=CLUTTER_EVENT_PROPAGATE; + + /* Push event to real text box if available */ + if(priv->actorTextBox) + { + result=clutter_actor_event(priv->actorTextBox, inEvent, FALSE); + } + + /* Return event handling result */ + return(result); +} + +/* Virtual function "handle_keyrelease_event" was called */ +static gboolean _xfdashboard_text_box_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardTextBox *self; + XfdashboardTextBoxPrivate *priv; + gboolean result; + + g_return_val_if_fail(XFDASHBOARD_IS_TEXT_BOX(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_TEXT_BOX(inFocusable); + priv=self->priv; + result=CLUTTER_EVENT_PROPAGATE; + + /* Push event to real text box if available */ + if(priv->actorTextBox) + { + result=clutter_actor_event(priv->actorTextBox, inEvent, FALSE); + } + + /* Return event handling result */ + return(result); +} + /* Interface initialization * Set up default functions */ @@ -592,7 +616,8 @@ void _xfdashboard_text_box_focusable_iface_init(XfdashboardFocusableInterface *i iface->can_focus=_xfdashboard_text_box_focusable_can_focus; iface->set_focus=_xfdashboard_text_box_focusable_set_focus; iface->unset_focus=_xfdashboard_text_box_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_text_box_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_text_box_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_text_box_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ diff --git a/src/viewpad.c b/src/viewpad.c index 555e88c..22560d2 100644 --- a/src/viewpad.c +++ b/src/viewpad.c @@ -999,9 +999,9 @@ static void _xfdashboard_viewpad_focusable_unset_focus(XfdashboardFocusable *inF } } -/* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_viewpad_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +/* Virtual function "handle_keypress_event" was called */ +static gboolean _xfdashboard_viewpad_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardViewpad *self; XfdashboardViewpadPrivate *priv; @@ -1026,7 +1026,41 @@ static gboolean _xfdashboard_viewpad_focusable_handle_key_event(XfdashboardFocus if(priv->activeView && XFDASHBOARD_IS_FOCUSABLE(priv->activeView)) { - handledEvent=xfdashboard_focusable_handle_key_event(XFDASHBOARD_FOCUSABLE(priv->activeView), inEvent); + handledEvent=xfdashboard_focusable_handle_keypress_event(XFDASHBOARD_FOCUSABLE(priv->activeView), inEvent); + } + + /* Return focusable state */ + return(handledEvent); +} + +/* Virtual function "handle_keyrelease_event" was called */ +static gboolean _xfdashboard_viewpad_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardViewpad *self; + XfdashboardViewpadPrivate *priv; + gboolean handledEvent; + + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_VIEWPAD(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_VIEWPAD(inFocusable); + priv=self->priv; + + /* Set handled key eventto CLUTTER_EVENT_PROPAGATE. It might be set to + * CLUTTER_EVENT_STOP if current active view is focusable and it handled + * the key event by its virtual function. + */ + handledEvent=CLUTTER_EVENT_PROPAGATE; + + /* Viewpad is just a proxy for the current active view. + * So check if current active view is focusable and call its + * virtual function. + */ + if(priv->activeView && + XFDASHBOARD_IS_FOCUSABLE(priv->activeView)) + { + handledEvent=xfdashboard_focusable_handle_keyrelease_event(XFDASHBOARD_FOCUSABLE(priv->activeView), inEvent); } /* Return focusable state */ @@ -1041,7 +1075,8 @@ void _xfdashboard_viewpad_focusable_iface_init(XfdashboardFocusableInterface *if iface->can_focus=_xfdashboard_viewpad_focusable_can_focus; iface->set_focus=_xfdashboard_viewpad_focusable_set_focus; iface->unset_focus=_xfdashboard_viewpad_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_viewpad_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_viewpad_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_viewpad_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ diff --git a/src/windows-view.c b/src/windows-view.c index 7eb02a8..171727e 100644 --- a/src/windows-view.c +++ b/src/windows-view.c @@ -689,9 +689,9 @@ static void _xfdashboard_windows_view_focusable_unset_focus(XfdashboardFocusable } } -/* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_windows_view_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +/* Virtual function "handle_keypress_event" was called */ +static gboolean _xfdashboard_windows_view_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardWindowsView *self; XfdashboardWindowsViewPrivate *priv; @@ -702,142 +702,155 @@ static gboolean _xfdashboard_windows_view_focusable_handle_key_event(Xfdashboard self=XFDASHBOARD_WINDOWS_VIEW(inFocusable); priv=self->priv; - /* Handle key events when key was released */ - if(clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE) + /* Move selection if an arrow key was pressed */ + if(inEvent->key.keyval==CLUTTER_KEY_Left || + inEvent->key.keyval==CLUTTER_KEY_Right || + inEvent->key.keyval==CLUTTER_KEY_Up || + inEvent->key.keyval==CLUTTER_KEY_Down) { - /* Activate selected window on ENTER or close window on DELETE/BACKSPACE */ - switch(inEvent->key.keyval) + gint index; + gint newIndex; + gint numberChildren; + gint rows; + gint columns; + gint selectionRow; + gint selectionColumn; + ClutterActorIter iter; + ClutterActor *child; + + /* If there is nothing selected, select first actor and return */ + if(!priv->selectedItem) { - case CLUTTER_KEY_Return: - case CLUTTER_KEY_KP_Enter: - case CLUTTER_KEY_ISO_Enter: - if(priv->selectedItem) - { - _xfdashboard_windows_view_on_window_clicked(self, XFDASHBOARD_LIVE_WINDOW(priv->selectedItem)); - } - return(CLUTTER_EVENT_STOP); + priv->selectedItem=clutter_actor_get_first_child(CLUTTER_ACTOR(self)); - case CLUTTER_KEY_BackSpace: - case CLUTTER_KEY_Delete: - case CLUTTER_KEY_KP_Delete: - if(priv->selectedItem) - { - _xfdashboard_windows_view_on_window_close_clicked(self, XFDASHBOARD_LIVE_WINDOW(priv->selectedItem)); - } - return(CLUTTER_EVENT_STOP); + if(priv->selectedItem) + { + xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + } + + return(CLUTTER_EVENT_STOP); } - /* Move selection if an arrow key was pressed */ - if(inEvent->key.keyval==CLUTTER_KEY_Left || - inEvent->key.keyval==CLUTTER_KEY_Right || - inEvent->key.keyval==CLUTTER_KEY_Up || - inEvent->key.keyval==CLUTTER_KEY_Down) + /* Get number of rows and columns and also get number of children + * of layout manager. + */ + numberChildren=xfdashboard_scaled_table_layout_get_number_children(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); + rows=xfdashboard_scaled_table_layout_get_rows(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); + columns=xfdashboard_scaled_table_layout_get_columns(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); + + /* Get index of current selection */ + newIndex=index=0; + clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self)); + while(clutter_actor_iter_next(&iter, &child) && + child!=priv->selectedItem) { - gint index; - gint newIndex; - gint numberChildren; - gint rows; - gint columns; - gint selectionRow; - gint selectionColumn; - ClutterActorIter iter; - ClutterActor *child; - - /* If there is nothing selected, select first actor and return */ - if(!priv->selectedItem) - { - priv->selectedItem=clutter_actor_get_first_child(CLUTTER_ACTOR(self)); - - if(priv->selectedItem) - { - xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); - } + index++; + newIndex++; + } - return(CLUTTER_EVENT_STOP); - } + selectionRow=(index / columns); + selectionColumn=(index % columns); - /* Get number of rows and columns and also get number of children - * of layout manager. - */ - numberChildren=xfdashboard_scaled_table_layout_get_number_children(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); - rows=xfdashboard_scaled_table_layout_get_rows(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); - columns=xfdashboard_scaled_table_layout_get_columns(XFDASHBOARD_SCALED_TABLE_LAYOUT(priv->layout)); - - /* Get index of current selection */ - newIndex=index=0; - clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self)); - while(clutter_actor_iter_next(&iter, &child) && - child!=priv->selectedItem) + /* Determine index of new selection depending on arrow key pressed */ + if(columns>1 && inEvent->key.keyval==CLUTTER_KEY_Left) + { + newIndex--; + if(newIndex<(selectionRow*columns)) { - index++; - newIndex++; + newIndex=(selectionRow*columns)+columns-1; + if(newIndex>=numberChildren) newIndex=numberChildren-1; } + } - selectionRow=(index / columns); - selectionColumn=(index % columns); - - /* Determine index of new selection depending on arrow key pressed */ - if(columns>1 && inEvent->key.keyval==CLUTTER_KEY_Left) + if(columns>1 && inEvent->key.keyval==CLUTTER_KEY_Right) + { + newIndex++; + if(newIndex>=((selectionRow+1)*columns) || + newIndex>=numberChildren) { - newIndex--; - if(newIndex<(selectionRow*columns)) - { - newIndex=(selectionRow*columns)+columns-1; - if(newIndex>=numberChildren) newIndex=numberChildren-1; - } + newIndex=(selectionRow*columns); } + } - if(columns>1 && inEvent->key.keyval==CLUTTER_KEY_Right) + if(rows>1 && inEvent->key.keyval==CLUTTER_KEY_Up) + { + newIndex-=columns; + if(newIndex<0) { - newIndex++; - if(newIndex>=((selectionRow+1)*columns) || - newIndex>=numberChildren) - { - newIndex=(selectionRow*columns); - } + newIndex=((rows-1)*columns)+selectionColumn; + if(newIndex>=numberChildren) newIndex-=columns; } + } - if(rows>1 && inEvent->key.keyval==CLUTTER_KEY_Up) - { - newIndex-=columns; - if(newIndex<0) - { - newIndex=((rows-1)*columns)+selectionColumn; - if(newIndex>=numberChildren) newIndex-=columns; - } - } + if(rows>1 && inEvent->key.keyval==CLUTTER_KEY_Down) + { + newIndex+=columns; + if(newIndex>=numberChildren) newIndex=selectionColumn; + } - if(rows>1 && inEvent->key.keyval==CLUTTER_KEY_Down) - { - newIndex+=columns; - if(newIndex>=numberChildren) newIndex=selectionColumn; - } + /* Only change selection and update the affected actors if index of + * new and old selection differ. + */ + if(newIndex==index) return(CLUTTER_EVENT_STOP); - /* Only change selection and update the affected actors if index of - * new and old selection differ. - */ - if(newIndex==index) return(CLUTTER_EVENT_STOP); + /* Unstyle current selection */ + xfdashboard_stylable_remove_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); - /* Unstyle current selection */ - xfdashboard_stylable_remove_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + /* Get new selection and style it */ + index=newIndex; + clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self)); + while(clutter_actor_iter_next(&iter, &priv->selectedItem) && + index>0) + { + index--; + } - /* Get new selection and style it */ - index=newIndex; - clutter_actor_iter_init(&iter, CLUTTER_ACTOR(self)); - while(clutter_actor_iter_next(&iter, &priv->selectedItem) && - index>0) + if(priv->selectedItem) + { + xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + } + + /* Event handled */ + return(CLUTTER_EVENT_STOP); + } + + /* We did not handle this event */ + return(CLUTTER_EVENT_PROPAGATE); +} + +/* Virtual function "handle_key_event" was called */ +static gboolean _xfdashboard_windows_view_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardWindowsView *self; + XfdashboardWindowsViewPrivate *priv; + + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_WINDOWS_VIEW(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_WINDOWS_VIEW(inFocusable); + priv=self->priv; + + /* Activate selected window on ENTER or close window on DELETE/BACKSPACE */ + switch(inEvent->key.keyval) + { + case CLUTTER_KEY_Return: + case CLUTTER_KEY_KP_Enter: + case CLUTTER_KEY_ISO_Enter: + if(priv->selectedItem) { - index--; + _xfdashboard_windows_view_on_window_clicked(self, XFDASHBOARD_LIVE_WINDOW(priv->selectedItem)); } + return(CLUTTER_EVENT_STOP); + case CLUTTER_KEY_BackSpace: + case CLUTTER_KEY_Delete: + case CLUTTER_KEY_KP_Delete: if(priv->selectedItem) { - xfdashboard_stylable_add_pseudo_class(XFDASHBOARD_STYLABLE(priv->selectedItem), "selected"); + _xfdashboard_windows_view_on_window_close_clicked(self, XFDASHBOARD_LIVE_WINDOW(priv->selectedItem)); } - - /* Event handled */ return(CLUTTER_EVENT_STOP); - } } /* We did not handle this event */ @@ -852,7 +865,8 @@ void _xfdashboard_windows_view_focusable_iface_init(XfdashboardFocusableInterfac iface->can_focus=_xfdashboard_windows_view_focusable_can_focus; iface->set_focus=_xfdashboard_windows_view_focusable_set_focus; iface->unset_focus=_xfdashboard_windows_view_focusable_unset_focus; - iface->handle_key_event=_xfdashboard_windows_view_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_windows_view_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_windows_view_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ diff --git a/src/workspace-selector.c b/src/workspace-selector.c index de15bfa..1f12e03 100644 --- a/src/workspace-selector.c +++ b/src/workspace-selector.c @@ -801,9 +801,9 @@ static void _xfdashboard_workspace_selector_allocate(ClutterActor *inActor, /* IMPLEMENTATION: Interface XfdashboardFocusable */ -/* Virtual function "handle_key_event" was called */ -static gboolean _xfdashboard_workspace_selector_focusable_handle_key_event(XfdashboardFocusable *inFocusable, - const ClutterEvent *inEvent) +/* Virtual function "handle_keypress_event" was called */ +static gboolean _xfdashboard_workspace_selector_focusable_handle_keypress_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) { XfdashboardWorkspaceSelector *self; XfdashboardWorkspaceSelectorPrivate *priv; @@ -817,22 +817,32 @@ static gboolean _xfdashboard_workspace_selector_focusable_handle_key_event(Xfdas self=XFDASHBOARD_WORKSPACE_SELECTOR(inFocusable); priv=self->priv; - /* Handle key events when key was released */ - if(clutter_event_type(inEvent)==CLUTTER_KEY_RELEASE) + /* Get current and last workspace */ + currentWorkspace=xfdashboard_window_tracker_workspace_get_number(priv->activeWorkspace); + maxWorkspace=xfdashboard_window_tracker_get_workspaces_count(priv->windowTracker); + + /* Change workspace if an arrow key was pressed which makes sense + * for orientation set + */ + if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Up) || + (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Left)) { - /* Get current and last workspace */ - currentWorkspace=xfdashboard_window_tracker_workspace_get_number(priv->activeWorkspace); - maxWorkspace=xfdashboard_window_tracker_get_workspaces_count(priv->windowTracker); + /* Activate previous workspace */ + currentWorkspace--; + if(currentWorkspace<0) currentWorkspace=maxWorkspace-1; - /* Change workspace if an arrow key was pressed which makes sense - * for orientation set - */ - if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Up) || - (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Left)) + workspace=xfdashboard_window_tracker_get_workspace_by_number(priv->windowTracker, currentWorkspace); + xfdashboard_window_tracker_workspace_activate(workspace); + + /* Event handled */ + return(CLUTTER_EVENT_STOP); + } + else if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Down) || + (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Right)) { - /* Activate previous workspace */ - currentWorkspace--; - if(currentWorkspace<0) currentWorkspace=maxWorkspace-1; + /* Activate next workspace */ + currentWorkspace++; + if(currentWorkspace>=maxWorkspace) currentWorkspace=0; workspace=xfdashboard_window_tracker_get_workspace_by_number(priv->windowTracker, currentWorkspace); xfdashboard_window_tracker_workspace_activate(workspace); @@ -840,35 +850,43 @@ static gboolean _xfdashboard_workspace_selector_focusable_handle_key_event(Xfdas /* Event handled */ return(CLUTTER_EVENT_STOP); } - else if((priv->orientation==CLUTTER_ORIENTATION_VERTICAL && inEvent->key.keyval==CLUTTER_KEY_Down) || - (priv->orientation==CLUTTER_ORIENTATION_HORIZONTAL && inEvent->key.keyval==CLUTTER_KEY_Right)) - { - /* Activate next workspace */ - currentWorkspace++; - if(currentWorkspace>=maxWorkspace) currentWorkspace=0; - workspace=xfdashboard_window_tracker_get_workspace_by_number(priv->windowTracker, currentWorkspace); - xfdashboard_window_tracker_workspace_activate(workspace); + /* We did not handle this event */ + return(CLUTTER_EVENT_PROPAGATE); +} - /* Event handled */ - return(CLUTTER_EVENT_STOP); - } +/* Virtual function "handle_keyrelease_event" was called */ +static gboolean _xfdashboard_workspace_selector_focusable_handle_keyrelease_event(XfdashboardFocusable *inFocusable, + const ClutterEvent *inEvent) +{ + XfdashboardWorkspaceSelector *self; + XfdashboardWorkspaceSelectorPrivate *priv; + gint currentWorkspace; + XfdashboardWindowTrackerWorkspace *workspace; - /* Activate workspace on ENTER */ - if(inEvent->key.keyval==CLUTTER_KEY_Return || - inEvent->key.keyval==CLUTTER_KEY_KP_Enter || - inEvent->key.keyval==CLUTTER_KEY_ISO_Enter) - { - /* Active workspace */ - workspace=xfdashboard_window_tracker_get_workspace_by_number(priv->windowTracker, currentWorkspace); - xfdashboard_window_tracker_workspace_activate(workspace); + g_return_val_if_fail(XFDASHBOARD_IS_FOCUSABLE(inFocusable), CLUTTER_EVENT_PROPAGATE); + g_return_val_if_fail(XFDASHBOARD_IS_WORKSPACE_SELECTOR(inFocusable), CLUTTER_EVENT_PROPAGATE); + + self=XFDASHBOARD_WORKSPACE_SELECTOR(inFocusable); + priv=self->priv; - /* Quit application */ - xfdashboard_application_quit(); + /* Activate workspace on ENTER */ + if(inEvent->key.keyval==CLUTTER_KEY_Return || + inEvent->key.keyval==CLUTTER_KEY_KP_Enter || + inEvent->key.keyval==CLUTTER_KEY_ISO_Enter) + { + /* Get current workspace */ + currentWorkspace=xfdashboard_window_tracker_workspace_get_number(priv->activeWorkspace); - /* Event handled */ - return(CLUTTER_EVENT_STOP); - } + /* Active workspace */ + workspace=xfdashboard_window_tracker_get_workspace_by_number(priv->windowTracker, currentWorkspace); + xfdashboard_window_tracker_workspace_activate(workspace); + + /* Quit application */ + xfdashboard_application_quit(); + + /* Event handled */ + return(CLUTTER_EVENT_STOP); } /* We did not handle this event */ @@ -880,7 +898,8 @@ static gboolean _xfdashboard_workspace_selector_focusable_handle_key_event(Xfdas */ void _xfdashboard_workspace_selector_focusable_iface_init(XfdashboardFocusableInterface *iface) { - iface->handle_key_event=_xfdashboard_workspace_selector_focusable_handle_key_event; + iface->handle_keypress_event=_xfdashboard_workspace_selector_focusable_handle_keypress_event; + iface->handle_keyrelease_event=_xfdashboard_workspace_selector_focusable_handle_keyrelease_event; } /* IMPLEMENTATION: GObject */ -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list [email protected] https://mail.xfce.org/mailman/listinfo/xfce4-commits
