From 69117acc63fb6d0f2321d390014269b018047ca1 Mon Sep 17 00:00:00 2001 From: Bastien Nocera <hadess@hadess.net> Date: Fri, 19 Jun 2009 15:15:39 +0100 Subject: [PATCH] =?utf-8?q?Bug=20521551=20=E2=80=93=20Capture=20XF86WebCam=20(webcam=20button)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit Using the XF86Webcam button. --- src/cheese-window.c | 33 +++++++++++++++++++++++++++++++++ 1 files changed, 33 insertions(+), 0 deletions(-) diff --git a/src/cheese-window.c b/src/cheese-window.c index fd5727b..d922e5e 100644 --- a/src/cheese-window.c +++ b/src/cheese-window.c @@ -39,6 +39,8 @@ #include <gtk/gtk.h> #include <libebook/e-book.h> +#include <X11/XF86keysym.h> + #ifdef HILDON #include <hildon/hildon-program.h> #endif @@ -178,6 +180,8 @@ typedef struct CheeseFlash *flash; } CheeseWindow; +static void cheese_window_action_button_clicked_cb (GtkWidget *widget, CheeseWindow *cheese_window); + void cheese_window_bring_to_front (gpointer data) { @@ -260,6 +264,30 @@ cheese_window_delete_event_cb (GtkWidget *widget, GdkEvent event, gpointer data) return FALSE; } +static gboolean +cheese_window_key_press_event_cb (GtkWidget *win, GdkEventKey *event, CheeseWindow *cheese_window) +{ + /* If we have modifiers, and either Ctrl, Mod1 (Alt), or any + * of Mod3 to Mod5 (Mod2 is num-lock...) are pressed, we + * let Gtk+ handle the key */ + if (event->state != 0 + && ((event->state & GDK_CONTROL_MASK) + || (event->state & GDK_MOD1_MASK) + || (event->state & GDK_MOD3_MASK) + || (event->state & GDK_MOD4_MASK) + || (event->state & GDK_MOD5_MASK))) + return FALSE; + + switch (event->keyval) { + case XF86XK_WebCam: + /* do stuff */ + cheese_window_action_button_clicked_cb (NULL, cheese_window); + return TRUE; + } + + return FALSE; +} + static void cheese_window_fullscreen_clear_timeout (CheeseWindow *cheese_window) { @@ -1849,6 +1877,11 @@ cheese_window_create_window (CheeseWindow *cheese_window) g_signal_connect (cheese_window->window, "delete_event", G_CALLBACK (cheese_window_delete_event_cb), NULL); + /* Listen for key presses */ + gtk_widget_add_events (cheese_window->window, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK); + g_signal_connect (cheese_window->window, "key_press_event", + G_CALLBACK (cheese_window_key_press_event_cb), cheese_window); + g_signal_connect (cheese_window->take_picture, "clicked", G_CALLBACK (cheese_window_action_button_clicked_cb), cheese_window); g_signal_connect (cheese_window->take_picture_fullscreen, "clicked", -- 1.6.2.2