static void on_highlight_widget (GtkWidget *button, GdkEvent *event, GtkInspectorWindow *iw) { GtkWidget *widget; widget = find_widget_at_pointer (gdk_event_get_device (event)); if (widget == NULL) { /* This window isn't in-process. Ignore it. */ return; } if (gtk_widget_get_toplevel (widget) == GTK_WIDGET (iw)) { /* Don't hilight things in the inspector window */ return; } if (iw->flash_widget == widget) { /* Already selected */ return; } clear_flash (iw); start_flash (iw, widget); }
static void start_flash (GtkInspectorWindow *iw, GtkWidget *widget) { clear_flash (iw); iw->flash_count = 1; iw->flash_widget = widget; g_signal_connect_after (widget, "draw", G_CALLBACK (draw_flash), iw); g_signal_connect_swapped (widget, "unmap", G_CALLBACK (clear_flash), iw); gtk_widget_queue_draw (widget); }
static void on_inspect_widget (GtkWidget *button, GdkEvent *event, GtkInspectorWindow *iw) { GtkWidget *widget; gdk_window_raise (gtk_widget_get_window (GTK_WIDGET (iw))); clear_flash (iw); widget = find_widget_at_pointer (gdk_event_get_device (event)); if (widget) select_widget (iw, widget); }
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 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); gdk_device_ungrab (gdk_event_get_device (event), GDK_CURRENT_TIME); 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; GdkDevice *device; if (ke->keyval == GDK_KEY_Escape) { g_signal_handlers_disconnect_by_func (widget, property_query_event, data); gtk_grab_remove (widget); device = gdk_device_get_associated_device (gdk_event_get_device (event)); gdk_device_ungrab (device, GDK_CURRENT_TIME); gdk_window_raise (gtk_widget_get_window (GTK_WIDGET (iw))); clear_flash (iw); } } return TRUE; }