[gtkmm-documentation] Fix compilation of cellrenderercustom example.



commit 13dc41fca9d169e92357c9ed626f30efdc94ccb9
Author: Krzesimir Nowak <qdlacz gmail com>
Date:   Sat Dec 25 23:49:39 2010 +0100

    Fix compilation of cellrenderercustom example.
    
    * examples/others/cellrenderercustom/cellrendererpopup.cc: Don't use
    deprecated {pointer,keyboard}_grab() methods in favor of more
    complicated Gdk::Device stuff.

 ChangeLog                                          |   10 ++++-
 .../others/cellrenderercustom/cellrendererpopup.cc |   43 +++++++++++++++++---
 2 files changed, 46 insertions(+), 7 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index ac35566..ab5e92b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2011-01-06  Krzesimir Nowak  <qdlacz gmail com>
+
+	Fix compilation of cellrenderercustom example.
+
+	* examples/others/cellrenderercustom/cellrendererpopup.cc: Don't use
+	deprecated {pointer,keyboard}_grab() methods in favor of more
+	complicated Gdk::Device stuff.
+
 2011-01-04  Murray Cumming  <murrayc murrayc com>
 
 	Avoid use of deprecated glibmm and giomm API.
@@ -17,7 +25,7 @@
 
 2010-12-23  Murray Cumming  <murrayc murrayc com>
 
-	Gtk::Application example: Minor cleanip.
+	Gtk::Application example: Minor cleanup.
 
 	* examples/book/application/exampleapplication.[h|cc]:
 	* examples/book/application/examplewindow.cc:
diff --git a/examples/others/cellrenderercustom/cellrendererpopup.cc b/examples/others/cellrenderercustom/cellrendererpopup.cc
index b2c62bb..ca38559 100644
--- a/examples/others/cellrenderercustom/cellrendererpopup.cc
+++ b/examples/others/cellrenderercustom/cellrendererpopup.cc
@@ -28,14 +28,45 @@ namespace
 
 bool grab_on_window(const Glib::RefPtr<Gdk::Window>& window, guint32 activate_time)
 {
-  if(window->pointer_grab(true,
-        Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK,
-        activate_time) == 0)
+  Glib::RefPtr<Gdk::Device> device (Glib::wrap(gtk_get_current_event_device(), true));
+
+  if(device)
   {
-    if(window->keyboard_grab(true, activate_time) == 0)
-      return true;
+    Glib::RefPtr<Gdk::Device> keyboard_device;
+    Glib::RefPtr<Gdk::Device> pointer_device;
+
+    if (device->get_source() == Gdk::SOURCE_KEYBOARD)
+    {
+      keyboard_device = device;
+      pointer_device = device->get_associated_device();
+    }
     else
-      Gdk::Window::pointer_ungrab(activate_time);
+    {
+      keyboard_device = device->get_associated_device();
+      pointer_device = device;
+    }
+    if(pointer_device && keyboard_device)
+    {
+      if(pointer_device->grab(window,
+            Gdk::OWNERSHIP_NONE,
+            true,
+            Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK,
+            activate_time) == Gdk::GRAB_SUCCESS)
+      {
+        if(keyboard_device->grab(window,
+              Gdk::OWNERSHIP_NONE,
+              true,
+              Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK,
+              activate_time) == Gdk::GRAB_SUCCESS)
+        {
+          return true;
+        }
+        else
+        {
+          pointer_device->ungrab(activate_time);
+        }
+      }
+    }
   }
 
   return false;



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]