Cache the browser's GDK cursor object
This commit is contained in:
parent
7d972e9334
commit
1f0d6b24d8
@ -45,6 +45,7 @@ struct _FastivBrowser {
|
|||||||
GArray *layouted_rows; ///< [Row]
|
GArray *layouted_rows; ///< [Row]
|
||||||
int selected;
|
int selected;
|
||||||
|
|
||||||
|
GdkCursor *pointer; ///< Cached pointer cursor
|
||||||
cairo_surface_t *glow; ///< CAIRO_FORMAT_A8 mask
|
cairo_surface_t *glow; ///< CAIRO_FORMAT_A8 mask
|
||||||
int item_border_x; ///< L/R .item margin + border
|
int item_border_x; ///< L/R .item margin + border
|
||||||
int item_border_y; ///< T/B .item margin + border
|
int item_border_y; ///< T/B .item margin + border
|
||||||
@ -285,6 +286,7 @@ fastiv_browser_finalize(GObject *gobject)
|
|||||||
g_array_free(self->entries, TRUE);
|
g_array_free(self->entries, TRUE);
|
||||||
g_array_free(self->layouted_rows, TRUE);
|
g_array_free(self->layouted_rows, TRUE);
|
||||||
cairo_surface_destroy(self->glow);
|
cairo_surface_destroy(self->glow);
|
||||||
|
g_clear_object(&self->pointer);
|
||||||
|
|
||||||
G_OBJECT_CLASS(fastiv_browser_parent_class)->finalize(gobject);
|
G_OBJECT_CLASS(fastiv_browser_parent_class)->finalize(gobject);
|
||||||
}
|
}
|
||||||
@ -345,6 +347,11 @@ fastiv_browser_realize(GtkWidget *widget)
|
|||||||
gtk_widget_register_window(widget, window);
|
gtk_widget_register_window(widget, window);
|
||||||
gtk_widget_set_window(widget, window);
|
gtk_widget_set_window(widget, window);
|
||||||
gtk_widget_set_realized(widget, TRUE);
|
gtk_widget_set_realized(widget, TRUE);
|
||||||
|
|
||||||
|
FastivBrowser *self = FASTIV_BROWSER(widget);
|
||||||
|
g_clear_object(&self->pointer);
|
||||||
|
self->pointer =
|
||||||
|
gdk_cursor_new_from_name(gdk_window_get_display(window), "pointer");
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -410,14 +417,7 @@ fastiv_browser_motion_notify_event(GtkWidget *widget, GdkEventMotion *event)
|
|||||||
|
|
||||||
const Entry *entry = entry_at(self, event->x, event->y);
|
const Entry *entry = entry_at(self, event->x, event->y);
|
||||||
GdkWindow *window = gtk_widget_get_window(widget);
|
GdkWindow *window = gtk_widget_get_window(widget);
|
||||||
if (entry) {
|
gdk_window_set_cursor(window, entry ? self->pointer : NULL);
|
||||||
GdkCursor *cursor =
|
|
||||||
gdk_cursor_new_from_name(gdk_window_get_display(window), "pointer");
|
|
||||||
gdk_window_set_cursor(window, cursor);
|
|
||||||
g_object_unref(cursor);
|
|
||||||
} else {
|
|
||||||
gdk_window_set_cursor(window, NULL);
|
|
||||||
}
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user