Sophie

Sophie

distrib > Mandriva > 2009.1 > x86_64 > by-pkgid > 7a701a163dac107d71331bd66ccbd0d5 > files > 2

cheese-2.26.3-1.1mdv2009.1.src.rpm

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