static void move_locate_pointer_window (MsdLocatePointerData *data, GdkScreen *screen) { gint cursor_x, cursor_y; GdkBitmap *mask; cairo_t *cr; gdk_window_get_pointer (gdk_screen_get_root_window (screen), &cursor_x, &cursor_y, NULL); gdk_window_move_resize (data->window, cursor_x - WINDOW_SIZE / 2, cursor_y - WINDOW_SIZE / 2, WINDOW_SIZE, WINDOW_SIZE); mask = gdk_pixmap_new (data->window, WINDOW_SIZE, WINDOW_SIZE, 1); cr = gdk_cairo_create (mask); cairo_set_source_rgb (cr, 0., 0., 0.); cairo_rectangle (cr, 0., 0., WINDOW_SIZE, WINDOW_SIZE); cairo_fill (cr); cairo_destroy (cr); /* allow events to happen through the window */ gdk_window_input_shape_combine_mask (data->window, mask, 0, 0); g_object_unref (mask); }
static void move_locate_pointer_window (GsdLocatePointerData *data, GdkScreen *screen) { gint cursor_x, cursor_y; GdkBitmap *mask; GdkColor col; GdkGC *gc; gdk_window_get_pointer (gdk_screen_get_root_window (screen), &cursor_x, &cursor_y, NULL); gdk_window_move_resize (data->window, cursor_x - WINDOW_SIZE / 2, cursor_y - WINDOW_SIZE / 2, WINDOW_SIZE, WINDOW_SIZE); col.pixel = 0; mask = gdk_pixmap_new (data->window, WINDOW_SIZE, WINDOW_SIZE, 1); gc = gdk_gc_new (mask); gdk_gc_set_foreground (gc, &col); gdk_draw_rectangle (mask, gc, TRUE, 0, 0, WINDOW_SIZE, WINDOW_SIZE); /* allow events to happen through the window */ gdk_window_input_shape_combine_mask (data->window, mask, 0, 0); g_object_unref (mask); g_object_unref (gc); }
static void gsd_media_keys_window_real_realize (GtkWidget *widget) { GdkColormap *colormap; GtkAllocation allocation; GdkBitmap *mask; cairo_t *cr; colormap = gdk_screen_get_rgba_colormap (gtk_widget_get_screen (widget)); if (colormap != NULL) { gtk_widget_set_colormap (widget, colormap); } if (GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize) { GTK_WIDGET_CLASS (gsd_media_keys_window_parent_class)->realize (widget); } gtk_widget_get_allocation (widget, &allocation); mask = gdk_pixmap_new (gtk_widget_get_window (widget), allocation.width, allocation.height, 1); cr = gdk_cairo_create (mask); cairo_set_source_rgba (cr, 1., 1., 1., 0.); cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); cairo_paint (cr); /* make the whole window ignore events */ gdk_window_input_shape_combine_mask (gtk_widget_get_window (widget), mask, 0, 0); g_object_unref (mask); cairo_destroy (cr); }
static VALUE gdkwin_input_shape_combine_mask(VALUE self, VALUE mask, VALUE x, VALUE y) { gdk_window_input_shape_combine_mask(_SELF(self), GDK_BITMAP(RVAL2GOBJ(mask)), NUM2INT(x), NUM2INT(y)); return self; }