[cheese] keybindings: capture webcam buttons
- From: Filippo Argiolas <fargiolas src gnome org>
- To: svn-commits-list gnome org
- Subject: [cheese] keybindings: capture webcam buttons
- Date: Sun, 21 Jun 2009 05:14:48 -0400 (EDT)
commit de0114556cef148c396552d1c189b476ea0c8aab
Author: Bastien Nocera <hadess hadess net>
Date: Fri Jun 19 15:15:39 2009 +0100
keybindings: capture webcam buttons
Listen to XF86Webcam keypresses to capture webcam buttons. Should work with
every driver that correctly binds the input device to KEY_CAMERA events.
Fixes bug #521551
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",
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]