Re: Meaning of delay in screenshot plugin

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

 



Hi,

On Wed, 2007-01-31 at 00:53 +0100, peter sikking wrote:

> So I had a look, one delay, but they also gave me an idea how
> we can make everybody here happy, without the cost of two delays:
> 
> In 'snap window' mode the shot shall be taken:
> 
> a) on the first mouse-down after the timer (can be zero) has expired;
> b) immediately, when a non-zero timer expires AND a mouse-button
>     (left, right [pop-up menu], even middle?) is being held down.
> 
> The latter captures menus being open or pushbuttons being down
> exactly when the timer expires.

Very nice! I gave a quick shot at an implementation and came up with the
following patch:

Index: plug-ins/common/screenshot.c
===================================================================
--- plug-ins/common/screenshot.c        (revision 21819)
+++ plug-ins/common/screenshot.c        (working copy)
@@ -398,10 +398,16 @@

   if (status != GrabSuccess)
     {
-      g_message (_("Error grabbing the pointer"));
+      gint   x, y;
+      guint  xmask;

-      XFreeCursor (x_dpy, x_cursor);
-      return 0;
+      XQueryPointer (x_dpy, x_root, &x_root, &x_win, &x, &y, &x, &y,
&xmask);
+
+      // FIXME: check window type and walk up the window hierarchy
until
+      //        we hit a toplevel window
+
+      if (x_win == None)
+        g_message (_("Error selecting the window"));
     }

   if (shootvals.shoot_type == SHOOT_REGION)
@@ -574,9 +580,11 @@
       g_free (keys);
     }

-  XUngrabPointer (x_dpy, CurrentTime);
+  if (status == GrabSuccess)
+    XUngrabPointer (x_dpy, CurrentTime);

   XFreeCursor (x_dpy, x_cursor);
+
   if (x_gc != None)
     XFreeGC (x_dpy, x_gc);


If you actually try this you will understand why I added a FIXME. If you
open a popup menu and keep the mouse button pressed until the timer
expires, this code takes a screenshot of the popup menu, not of the
window that the popup is created from. This behaviour is correct from a
technical point of view (after all popup menus are separate windows).
But it's not what the user expects. We will somehow have to special-case
this. I posted the patch here in case that someone experienced with XLib
programming wants to give this a try.


Sven


_______________________________________________
Gimp-developer mailing list
Gimp-developer@xxxxxxxxxxxxxxxxxxxxxx
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux