예제 #1
0
파일: grabs.c 프로젝트: burzumishi/e16
void
GrabButtonSet(unsigned int button, unsigned int modifiers, Win win,
	      unsigned int event_mask, unsigned int csr, int confine __UNUSED__)
{
   Bool                owner_events = False;
   int                 pointer_mode = GrabModeSync;
   int                 keyboard_mode = GrabModeAsync;
   int                 i;

#if USE_XI2
   EXIEventMask        em;
   XIGrabModifiers     modifiers_inouts[8];
   int                 num_modifiers;

   EXIMaskSetup(&em, DEV_PTR, event_mask);

   if (modifiers == AnyModifier)
     {
	num_modifiers = 1;
	modifiers_inouts[0].modifiers = XIAnyModifier;
	modifiers_inouts[0].status = 0;
     }
   else
     {
	num_modifiers = 0;
	for (i = 0; i < 8; i++)
	  {
	     if (i && !Mode.masks.mod_combos[i])
		continue;
	     modifiers_inouts[num_modifiers].modifiers =
		modifiers | Mode.masks.mod_combos[i];
	     modifiers_inouts[num_modifiers].status = 0;
	     num_modifiers++;
	  }
     }
   XIGrabButton(disp, DEV_PTR, button, WinGetXwin(win), ECsrGet(csr),
		pointer_mode, keyboard_mode, owner_events,
		&em.em, num_modifiers, modifiers_inouts);
#else
   EX_Window           confine_to = (confine) ? WinGetXwin(win) : NoXID;

   if (modifiers == AnyModifier)
     {
	XGrabButton(disp, button, modifiers,
		    WinGetXwin(win), owner_events, event_mask, pointer_mode,
		    keyboard_mode, confine_to, ECsrGet(csr));
	return;
     }

   for (i = 0; i < 8; i++)
     {
	if (i && !Mode.masks.mod_combos[i])
	   continue;
	XGrabButton(disp, button, modifiers | Mode.masks.mod_combos[i],
		    WinGetXwin(win), owner_events, event_mask, pointer_mode,
		    keyboard_mode, confine_to, ECsrGet(csr));
     }
#endif
}
예제 #2
0
void
grab_button (int        deviceid,
             gboolean   grab,
             GdkScreen *screen)
{
	GdkWindow *root;
	XIGrabModifiers mods;

	root = gdk_screen_get_root_window (screen);
	mods.modifiers = XIAnyModifier;

	if (grab) {
		XIEventMask evmask;
		unsigned char mask[(XI_LASTEVENT + 7)/8];

		memset (mask, 0, sizeof (mask));
		XISetMask (mask, XI_ButtonRelease);
		XISetMask (mask, XI_ButtonPress);

		evmask.deviceid = deviceid;
		evmask.mask_len = sizeof (mask);
		evmask.mask = mask;

		gdk_error_trap_push();
		XIGrabButton (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
			      deviceid,
			      XIAnyButton,
			      GDK_WINDOW_XID (root),
			      None,
			      GrabModeAsync,
			      GrabModeAsync,
			      False,
			      &evmask,
			      1,
			      &mods);
		gdk_error_trap_pop_ignored ();
	} else {
		gdk_error_trap_push();
		XIUngrabButton (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()),
				deviceid,
				XIAnyButton,
		                GDK_WINDOW_XID (root),
				1, &mods);
		gdk_error_trap_pop_ignored ();
	}
}
예제 #3
0
파일: device.c 프로젝트: iglosiggio/xfwm4
gboolean
xfwm_device_grab_button (XfwmDevices *devices, Display *display,
                         guint button, guint modifiers, Window grab_window,
                         gboolean owner_events, guint event_mask,
                         gint grab_mode, gint paired_device_mode,
                         Window confine_to, Cursor cursor)
{
    gboolean result;
    Status status;
#ifdef HAVE_XI2
    XIGrabModifiers xi2_modifiers;
    XIEventMask xievent_mask;
#endif

#ifdef HAVE_XI2
    if (devices->xi2_available)
    {
        xi2_modifiers.modifiers = xi2_modifier_mask (modifiers);
        xi2_modifiers.status = 0;

        xfwm_device_fill_xi2_event_mask (&xievent_mask, event_mask);
        status = XIGrabButton (display, devices->pointer.xi2_device, button, grab_window,
                               cursor, grab_mode, paired_device_mode, owner_events,
                               &xievent_mask, 1, &xi2_modifiers);
        g_free (xievent_mask.mask);
        result = (status == XIGrabSuccess);
    }
    else
#endif
    {
        status = XGrabButton (display, button, modifiers, grab_window,
                              owner_events, event_mask, grab_mode, paired_device_mode,
                              confine_to, cursor);
        result = (status == GrabSuccess);
    }
    return result;
}