diff options
author | Carlos Garcia Campos <carlosgc@gnome.org> | 2008-09-04 11:32:12 (GMT) |
---|---|---|
committer | Carlos Garcia Campos <carlosgc@src.gnome.org> | 2008-09-04 11:32:12 (GMT) |
commit | e01d6f5fd8c8682948d87cbfe3456a424652ad71 (patch) | |
tree | 073fd98fd4fbe243f55662f3aca82ef1a64733d9 /shell/ev-window.c | |
parent | eb120a34995e8be1b37e86f4eae2bdd3a8878146 (diff) |
Clean up the media player keys stuff.
2008-09-04 Carlos Garcia Campos <carlosgc@gnome.org>
* shell/ev-application.c: (ev_application_get_media_keys):
* shell/ev-media-player-keys.[ch]:
(ev_media_player_keys_class_init), (on_media_player_key_pressed),
(ev_media_player_keys_grab_keys),
(ev_media_player_keys_release_keys), (ev_media_player_keys_init),
(ev_media_player_keys_focused), (ev_media_player_keys_finalize):
* shell/ev-window.[ch]: (ev_window_dispose),
(view_actions_focus_in_cb), (ev_window_media_player_key_pressed),
(ev_window_init):
Clean up the media player keys stuff.
svn path=/trunk/; revision=3148
Diffstat (limited to 'shell/ev-window.c')
-rw-r--r-- | shell/ev-window.c | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/shell/ev-window.c b/shell/ev-window.c index 65f5d46..03f98cb 100644 --- a/shell/ev-window.c +++ b/shell/ev-window.c @@ -285,6 +285,9 @@ static void find_bar_search_changed_cb (EggFindBar *find_ static void ev_window_do_preview_print (EvWindow *window); static void ev_window_load_file_remote (EvWindow *ev_window, GFile *source_file); +static void ev_window_media_player_key_pressed (EvWindow *window, + const gchar *key, + gpointer user_data); G_DEFINE_TYPE (EvWindow, ev_window, GTK_TYPE_WINDOW) @@ -3256,12 +3259,6 @@ ev_window_cmd_go_previous_page (GtkAction *action, EvWindow *ev_window) ev_view_previous_page (EV_VIEW (ev_window->priv->view)); } -void -ev_window_go_previous_page (EvWindow *ev_window) -{ - ev_window_cmd_go_previous_page (NULL, ev_window); -} - static void ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window) { @@ -3270,12 +3267,6 @@ ev_window_cmd_go_next_page (GtkAction *action, EvWindow *ev_window) ev_view_next_page (EV_VIEW (ev_window->priv->view)); } -void -ev_window_go_next_page (EvWindow *ev_window) -{ - ev_window_cmd_go_next_page (NULL, ev_window); -} - static void ev_window_cmd_go_first_page (GtkAction *action, EvWindow *ev_window) { @@ -3284,12 +3275,6 @@ ev_window_cmd_go_first_page (GtkAction *action, EvWindow *ev_window) ev_page_cache_set_current_page (ev_window->priv->page_cache, 0); } -void -ev_window_go_first_page (EvWindow *ev_window) -{ - ev_window_cmd_go_first_page (NULL, ev_window); -} - static void ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window) { @@ -3301,12 +3286,6 @@ ev_window_cmd_go_last_page (GtkAction *action, EvWindow *ev_window) ev_page_cache_set_current_page (ev_window->priv->page_cache, n_pages - 1); } -void -ev_window_go_last_page (EvWindow *ev_window) -{ - ev_window_cmd_go_last_page (NULL, ev_window); -} - static void ev_window_cmd_go_forward (GtkAction *action, EvWindow *ev_window) { @@ -3407,12 +3386,6 @@ ev_window_cmd_start_presentation (GtkAction *action, EvWindow *window) ev_window_run_presentation (window); } -void -ev_window_start_presentation (EvWindow *ev_window) -{ - ev_window_run_presentation (ev_window); -} - static gboolean ev_window_enumerate_printer_cb (GtkPrinter *printer, EvWindow *window) @@ -4220,16 +4193,14 @@ ev_window_dispose (GObject *object) { EvWindow *window = EV_WINDOW (object); EvWindowPrivate *priv = window->priv; -#ifdef ENABLE_DBUS - GObject *keys; + GObject *mpkeys = ev_application_get_media_keys (EV_APP); - keys = ev_application_get_media_keys (EV_APP); - if (keys) { - ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys), NULL); - g_object_unref (keys); + if (mpkeys) { + g_signal_handlers_disconnect_by_func (mpkeys, + ev_window_media_player_key_pressed, + window); } -#endif /* ENABLE_DBUS */ - + if (priv->setup_document_idle > 0) { g_source_remove (priv->setup_document_idle); priv->setup_document_idle = 0; @@ -4766,10 +4737,7 @@ view_actions_focus_in_cb (GtkWidget *widget, GdkEventFocus *event, EvWindow *win GObject *keys; keys = ev_application_get_media_keys (EV_APP); - if (keys) { - ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys), window); - g_object_unref (keys); - } + ev_media_player_keys_focused (EV_MEDIA_PLAYER_KEYS (keys)); #endif /* ENABLE_DBUS */ update_chrome_flag (window, EV_CHROME_RAISE_TOOLBAR, FALSE); @@ -5338,12 +5306,42 @@ ev_attachment_popup_cmd_save_attachment_as (GtkAction *action, EvWindow *window) } static void +ev_window_media_player_key_pressed (EvWindow *window, + const gchar *key, + gpointer user_data) +{ + if (!gtk_window_is_active (GTK_WINDOW (window))) + return; + + /* Note how Previous/Next only go to the + * next/previous page despite their icon telling you + * they should go to the beginning/end. + * + * There's very few keyboards with FFW/RWD though, + * so we stick the most useful keybinding on the most + * often seen keys + */ + if (strcmp (key, "Play") == 0) { + ev_window_run_presentation (window); + } else if (strcmp (key, "Previous") == 0) { + ev_window_cmd_go_previous_page (NULL, window); + } else if (strcmp (key, "Next") == 0) { + ev_window_cmd_go_next_page (NULL, window); + } else if (strcmp (key, "FastForward") == 0) { + ev_window_cmd_go_last_page (NULL, window); + } else if (strcmp (key, "Rewind") == 0) { + ev_window_cmd_go_first_page (NULL, window); + } +} + +static void ev_window_init (EvWindow *ev_window) { GtkActionGroup *action_group; GtkAccelGroup *accel_group; GError *error = NULL; GtkWidget *sidebar_widget; + GObject *mpkeys; g_signal_connect (ev_window, "configure_event", G_CALLBACK (window_configure_event_cb), NULL); @@ -5624,6 +5622,14 @@ ev_window_init (EvWindow *ev_window) "/AttachmentPopup"); ev_window->priv->attach_list = NULL; + /* Media player keys */ + mpkeys = ev_application_get_media_keys (EV_APP); + if (mpkeys) { + g_signal_connect_swapped (mpkeys, "key_pressed", + G_CALLBACK (ev_window_media_player_key_pressed), + ev_window); + } + /* Give focus to the document view */ gtk_widget_grab_focus (ev_window->priv->view); |