static gboolean gtk_window_button_release_callback(GtkWidget* widget, GdkEventButton* gdk_event, wxMiniFrame* win) { if (gdk_event->window != gtk_widget_get_window(widget)) return false; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; if (!win->m_isDragging) return TRUE; win->m_isDragging = false; int x = (int)gdk_event->x; int y = (int)gdk_event->y; #ifdef __WXGTK4__ gdk_seat_ungrab(gdk_event_get_seat((GdkEvent*)gdk_event)); #elif defined(__WXGTK3__) wxGCC_WARNING_SUPPRESS(deprecated-declarations) gdk_device_ungrab(gdk_event->device, gdk_event->time); wxGCC_WARNING_RESTORE() #else gdk_pointer_ungrab(gdk_event->time); #endif int org_x = 0; int org_y = 0; gdk_window_get_origin(gtk_widget_get_window(widget), &org_x, &org_y); x += org_x - win->m_diffX; y += org_y - win->m_diffY; gtk_window_move( GTK_WINDOW(win->m_widget), x, y ); return TRUE; }
static gboolean property_query_event (GtkWidget *widget, GdkEvent *event, gpointer data) { GtkInspectorWindow *iw = (GtkInspectorWindow *)data; if (event->type == GDK_BUTTON_RELEASE) { g_signal_handlers_disconnect_by_func (widget, property_query_event, data); gtk_grab_remove (widget); if (iw->grabbed) gdk_seat_ungrab (gdk_event_get_seat (event)); reemphasize_window (GTK_WIDGET (iw)); on_inspect_widget (widget, event, data); } else if (event->type == GDK_MOTION_NOTIFY) { on_highlight_widget (widget, event, data); } else if (event->type == GDK_KEY_PRESS) { GdkEventKey *ke = (GdkEventKey*)event; if (ke->keyval == GDK_KEY_Escape) { g_signal_handlers_disconnect_by_func (widget, property_query_event, data); gtk_grab_remove (widget); if (iw->grabbed) gdk_seat_ungrab (gdk_event_get_seat (event)); reemphasize_window (GTK_WIDGET (iw)); clear_flash (iw); } } return TRUE; }
static void gstyle_eyedropper_event_get_root_coords (GstyleEyedropper *self, GdkEvent *event, gint *x_root, gint *y_root) { GdkSeat *seat; GdkDevice *pointer; seat = gdk_event_get_seat (event); pointer = gdk_seat_get_pointer (seat); gdk_device_get_position (pointer, NULL, x_root, y_root); }
static gboolean gtk_window_button_press_callback(GtkWidget* widget, GdkEventButton* gdk_event, wxMiniFrame* win) { if (gdk_event->window != gtk_widget_get_window(widget)) return false; if (g_blockEventsOnDrag) return TRUE; if (g_blockEventsOnScroll) return TRUE; if (win->m_isDragging) return TRUE; int style = win->GetWindowStyle(); int y = (int)gdk_event->y; int x = (int)gdk_event->x; if ((style & wxRESIZE_BORDER) && (x > win->m_width-14) && (y > win->m_height-14)) { GtkWidget *ancestor = gtk_widget_get_toplevel( widget ); GdkWindow *source = gtk_widget_get_window(widget); int org_x = 0; int org_y = 0; gdk_window_get_origin( source, &org_x, &org_y ); gtk_window_begin_resize_drag (GTK_WINDOW (ancestor), GDK_WINDOW_EDGE_SOUTH_EAST, 1, org_x + x, org_y + y, 0); return TRUE; } if (win->m_miniTitle && (style & wxCLOSE_BOX)) { if ((y > 3) && (y < 19) && (x > win->m_width-19) && (x < win->m_width-3)) { win->Close(); return TRUE; } } if (y >= win->m_miniEdge + win->m_miniTitle) return true; gdk_window_raise(gtk_widget_get_window(win->m_widget)); #ifdef __WXGTK4__ gdk_seat_grab( gdk_event_get_seat((GdkEvent*)gdk_event), gdk_event_get_window((GdkEvent*)gdk_event), GDK_SEAT_CAPABILITY_POINTER, false, NULL, (GdkEvent*)gdk_event, NULL, 0); #else const GdkEventMask mask = GdkEventMask( GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_MOTION_MASK | GDK_BUTTON1_MOTION_MASK); #ifdef __WXGTK3__ wxGCC_WARNING_SUPPRESS(deprecated-declarations) gdk_device_grab( gdk_event->device, gdk_event->window, GDK_OWNERSHIP_NONE, false, mask, NULL, gdk_event->time); wxGCC_WARNING_RESTORE() #else gdk_pointer_grab(gdk_event->window, false, mask, NULL, NULL, gdk_event->time); #endif #endif // !__WXGTK4__ win->m_diffX = x; win->m_diffY = y; win->m_oldX = 0; win->m_oldY = 0; win->m_isDragging = true; return TRUE; }
void gstyle_eyedropper_set_source_event (GstyleEyedropper *self, GdkEvent *event) { GtkWidget *source; GtkStyleContext *context; GtkWidget *box; GtkWidget *swatch; GdkGrabStatus status; gint x_root, y_root; gint x, y; g_return_if_fail (GSTYLE_IS_EYEDROPPER (self)); g_return_if_fail (event != NULL); self->seat = g_object_ref (gdk_event_get_seat (event)); source = gtk_get_event_widget (event); self->screen = gdk_event_get_screen (event); g_signal_connect_swapped (self->screen, "size-changed", G_CALLBACK (gstyle_eyedropper_screen_size_changed_cb), self); self->window = g_object_ref_sink (gtk_window_new (GTK_WINDOW_POPUP)); gtk_window_set_screen (GTK_WINDOW (self->window),self->screen); gtk_widget_set_name (self->window, "gstyleeyedropper"); context = gtk_widget_get_style_context (self->window); self->default_provider = gstyle_css_provider_init_default (gtk_style_context_get_screen (context)); box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6); gtk_container_add (GTK_CONTAINER (self->window), box); self->zoom_area = gtk_drawing_area_new (); gtk_widget_set_size_request (self->zoom_area, ZOOM_AREA_WIDTH, ZOOM_AREA_HEIGHT); gtk_container_add (GTK_CONTAINER (box), self->zoom_area); swatch = g_object_new (GSTYLE_TYPE_COLOR_WIDGET, "fallback-name-kind", GSTYLE_COLOR_KIND_RGB_HEX6, "fallback-name-visible", TRUE, "color", self->color, NULL); gtk_container_add (GTK_CONTAINER (box), swatch); g_signal_connect_object (self->zoom_area, "draw", G_CALLBACK (gstyle_eyedropper_zoom_area_draw_cb), self, G_CONNECT_SWAPPED); self->screen_width = gdk_screen_get_width (self->screen); self->screen_height = gdk_screen_get_height (self->screen); gstyle_eyedropper_event_get_root_coords (self, event, &x_root, &y_root); gstyle_eyedropper_calculate_window_position (self, GTK_WINDOW (self->window), x_root, y_root, &x, &y); gtk_window_move (GTK_WINDOW (self->window), x, y); gtk_widget_show_all (self->window); gtk_widget_add_events (self->window, GDK_BUTTON_RELEASE_MASK | GDK_BUTTON_PRESS_MASK | GDK_POINTER_MOTION_MASK); self->cursor = gdk_cursor_new_from_name (gdk_screen_get_display (self->screen), "cell"); gtk_grab_add (self->window); status = gdk_seat_grab (self->seat, gtk_widget_get_window (source), GDK_SEAT_CAPABILITY_ALL, FALSE, self->cursor, event, NULL, NULL); if (status != GDK_GRAB_SUCCESS) { g_warning ("grab failed status:%i\n", status); return; } self->motion_notify_handler_id = g_signal_connect_swapped (self->window, "motion-notify-event", G_CALLBACK (gstyle_eyedropper_pointer_motion_notify_cb), self); self->pointer_pressed_handler_id = g_signal_connect_swapped (self->window, "button-press-event", G_CALLBACK (gstyle_eyedropper_pointer_pressed_cb), self); self->pointer_wheel_handler_id = g_signal_connect_swapped (self->window, "scroll-event", G_CALLBACK (gstyle_eyedropper_pointer_wheel_cb), self); self->key_handler_id = g_signal_connect_swapped (self->window, "key-press-event", G_CALLBACK (gstyle_eyedropper_key_pressed_cb), self); self->grab_broken_handler_id = g_signal_connect_swapped (self->window, "grab-broken-event", G_CALLBACK (gstyle_eyedropper_grab_broken_cb), self); }