window: Stop using gtk_widget_register_surface
The GtkRoot implementations are expected to handle the necessary surface setup themselves, going forward.
This commit is contained in:
@@ -421,7 +421,18 @@ static void gtk_window_size_allocate (GtkWidget *widget,
|
|||||||
static gboolean gtk_window_close_request (GtkWindow *window);
|
static gboolean gtk_window_close_request (GtkWindow *window);
|
||||||
static void gtk_window_focus_in (GtkWidget *widget);
|
static void gtk_window_focus_in (GtkWidget *widget);
|
||||||
static void gtk_window_focus_out (GtkWidget *widget);
|
static void gtk_window_focus_out (GtkWidget *widget);
|
||||||
static void surface_state_changed (GtkWidget *widget);
|
|
||||||
|
static void surface_state_changed (GtkWidget *widget);
|
||||||
|
static void surface_size_changed (GtkWidget *widget,
|
||||||
|
int width,
|
||||||
|
int height);
|
||||||
|
static gboolean surface_render (GdkSurface *surface,
|
||||||
|
cairo_region_t *region,
|
||||||
|
GtkWidget *widget);
|
||||||
|
static gboolean surface_event (GdkSurface *surface,
|
||||||
|
GdkEvent *event,
|
||||||
|
GtkWidget *widget);
|
||||||
|
|
||||||
static void gtk_window_remove (GtkContainer *container,
|
static void gtk_window_remove (GtkContainer *container,
|
||||||
GtkWidget *widget);
|
GtkWidget *widget);
|
||||||
static void gtk_window_forall (GtkContainer *container,
|
static void gtk_window_forall (GtkContainer *container,
|
||||||
@@ -5690,9 +5701,12 @@ gtk_window_realize (GtkWidget *widget)
|
|||||||
priv->surface = surface;
|
priv->surface = surface;
|
||||||
|
|
||||||
gtk_widget_set_surface (widget, surface);
|
gtk_widget_set_surface (widget, surface);
|
||||||
|
gdk_surface_set_widget (surface, widget);
|
||||||
|
|
||||||
g_signal_connect_swapped (surface, "notify::state", G_CALLBACK (surface_state_changed), widget);
|
g_signal_connect_swapped (surface, "notify::state", G_CALLBACK (surface_state_changed), widget);
|
||||||
g_signal_connect_swapped (surface, "size-changed", G_CALLBACK (gtk_window_configure), widget);
|
g_signal_connect_swapped (surface, "size-changed", G_CALLBACK (surface_size_changed), widget);
|
||||||
gtk_widget_register_surface (widget, surface);
|
g_signal_connect (surface, "render", G_CALLBACK (surface_render), widget);
|
||||||
|
g_signal_connect (surface, "event", G_CALLBACK (surface_event), widget);
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (gtk_window_parent_class)->realize (widget);
|
GTK_WIDGET_CLASS (gtk_window_parent_class)->realize (widget);
|
||||||
|
|
||||||
@@ -5781,6 +5795,7 @@ gtk_window_unrealize (GtkWidget *widget)
|
|||||||
GtkWindow *window = GTK_WINDOW (widget);
|
GtkWindow *window = GTK_WINDOW (widget);
|
||||||
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
|
GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
|
||||||
GtkWindowGeometryInfo *info;
|
GtkWindowGeometryInfo *info;
|
||||||
|
GdkSurface *surface;
|
||||||
|
|
||||||
/* On unrealize, we reset the size of the window such
|
/* On unrealize, we reset the size of the window such
|
||||||
* that we will re-apply the default sizing stuff
|
* that we will re-apply the default sizing stuff
|
||||||
@@ -5818,12 +5833,13 @@ gtk_window_unrealize (GtkWidget *widget)
|
|||||||
gsk_renderer_unrealize (priv->renderer);
|
gsk_renderer_unrealize (priv->renderer);
|
||||||
g_clear_object (&priv->renderer);
|
g_clear_object (&priv->renderer);
|
||||||
|
|
||||||
g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget),
|
surface = _gtk_widget_get_surface (widget);
|
||||||
G_CALLBACK (surface_state_changed),
|
|
||||||
widget);
|
g_signal_handlers_disconnect_by_func (surface, surface_state_changed, widget);
|
||||||
g_signal_handlers_disconnect_by_func (_gtk_widget_get_surface (widget),
|
g_signal_handlers_disconnect_by_func (surface, surface_size_changed, widget);
|
||||||
G_CALLBACK (gtk_window_configure),
|
g_signal_handlers_disconnect_by_func (surface, surface_render, widget);
|
||||||
widget);
|
g_signal_handlers_disconnect_by_func (surface, surface_event, widget);
|
||||||
|
gdk_surface_set_widget (surface, NULL);
|
||||||
|
|
||||||
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
|
GTK_WIDGET_CLASS (gtk_window_parent_class)->unrealize (widget);
|
||||||
|
|
||||||
@@ -6139,6 +6155,32 @@ surface_state_changed (GtkWidget *widget)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
surface_size_changed (GtkWidget *widget,
|
||||||
|
int width,
|
||||||
|
int height)
|
||||||
|
{
|
||||||
|
gtk_window_configure (GTK_WINDOW (widget), width, height);
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
surface_render (GdkSurface *surface,
|
||||||
|
cairo_region_t *region,
|
||||||
|
GtkWidget *widget)
|
||||||
|
{
|
||||||
|
gtk_widget_render (widget, surface, region);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
surface_event (GdkSurface *surface,
|
||||||
|
GdkEvent *event,
|
||||||
|
GtkWidget *widget)
|
||||||
|
{
|
||||||
|
gtk_main_do_event (event);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
/* the accel_key and accel_mods fields of the key have to be setup
|
/* the accel_key and accel_mods fields of the key have to be setup
|
||||||
* upon calling this function. it’ll then return whether that key
|
* upon calling this function. it’ll then return whether that key
|
||||||
* is at all used as accelerator, and if so will OR in the
|
* is at all used as accelerator, and if so will OR in the
|
||||||
|
|||||||
Reference in New Issue
Block a user