Updating branch refs/heads/master to 2956065f531f583633574a4358d10dec81627053 (commit) from 7c095f5fcf887ee068dd170bfb89aeb24ef23307 (commit)
commit 2956065f531f583633574a4358d10dec81627053 Author: Olivier Fourdan <four...@xfce.org> Date: Mon Dec 19 20:18:31 2011 +0100 Make the position window a widget src/poswin.c | 65 +++++++++++++++++++++++++++++++++++++++++----------------- src/poswin.h | 9 +++++++- 2 files changed, 54 insertions(+), 20 deletions(-) diff --git a/src/poswin.c b/src/poswin.c index f443774..a7de33a 100644 --- a/src/poswin.c +++ b/src/poswin.c @@ -34,23 +34,57 @@ #include "frame.h" #include "poswin.h" +static void poswin_widget_class_init (PoswinWidgetClass *klass); + +static GType +poswin_widget_get_type (void) +{ + static GType type = G_TYPE_INVALID; + + if (G_UNLIKELY (type == G_TYPE_INVALID)) + { + static const GTypeInfo info = + { + sizeof (PoswinWidgetClass), + NULL, + NULL, + (GClassInitFunc) poswin_widget_class_init, + NULL, + NULL, + sizeof (Poswin), + 0, + NULL, + NULL, + }; + + type = g_type_register_static (GTK_TYPE_WINDOW, "Xfwm4PoswinWidget", &info, 0); + } + + return type; +} + +static void +poswin_widget_class_init (PoswinWidgetClass *klass) +{ + /* void */ +} + Poswin * poswinCreate (GdkScreen *gscr) { Poswin *poswin; GtkWidget *frame; - poswin = g_new (Poswin, 1); + poswin = g_object_new (poswin_widget_get_type(), "type", GTK_WINDOW_POPUP, NULL); - poswin->window = gtk_window_new (GTK_WINDOW_POPUP); - gtk_window_set_screen (GTK_WINDOW (poswin->window), gscr); - gtk_container_set_border_width (GTK_CONTAINER (poswin->window), 0); - gtk_window_set_resizable (GTK_WINDOW (poswin->window), TRUE); + gtk_window_set_screen (GTK_WINDOW (poswin), gscr); + gtk_container_set_border_width (GTK_CONTAINER (poswin), 0); + gtk_window_set_resizable (GTK_WINDOW (poswin), TRUE); frame = gtk_frame_new (NULL); gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_OUT); gtk_container_set_border_width (GTK_CONTAINER (frame), 0); - gtk_container_add (GTK_CONTAINER (poswin->window), frame); + gtk_container_add (GTK_CONTAINER (poswin), frame); poswin->label = gtk_label_new (""); gtk_misc_set_alignment (GTK_MISC (poswin->label), 0.5, 0.5); @@ -96,18 +130,11 @@ poswinSetPosition (Poswin * poswin, Client *c) g_snprintf (label, 32, "(%dx%d)", wsize, hsize); #endif gtk_label_set_text (GTK_LABEL (poswin->label), label); - gtk_widget_queue_draw (poswin->window); - gtk_window_get_size (GTK_WINDOW (poswin->window), &pw, &ph); + gtk_widget_queue_draw (GTK_WIDGET(poswin)); + gtk_window_get_size (GTK_WINDOW (poswin), &pw, &ph); px = x + (frameWidth (c) - pw) / 2; py = y + (frameHeight (c) - ph) / 2; - if (GTK_WIDGET_REALIZED (poswin->window)) - { - gdk_window_move_resize (poswin->window->window, px, py, pw, ph); - } - else - { - gtk_window_move (GTK_WINDOW (poswin->window), px, py); - } + gtk_window_move (GTK_WINDOW (poswin), px, py); } void @@ -115,7 +142,7 @@ poswinDestroy (Poswin * poswin) { g_return_if_fail (poswin != NULL); - gtk_widget_destroy (poswin->window); + gtk_widget_destroy (GTK_WIDGET(poswin)); } void @@ -123,7 +150,7 @@ poswinShow (Poswin * poswin) { g_return_if_fail (poswin != NULL); - gtk_widget_show (poswin->window); + gtk_widget_show (GTK_WIDGET(poswin)); } void @@ -131,5 +158,5 @@ poswinHide(Poswin * poswin) { g_return_if_fail (poswin != NULL); - gtk_widget_hide (poswin->window); + gtk_widget_hide (GTK_WIDGET(poswin)); } diff --git a/src/poswin.h b/src/poswin.h index 598492f..804e9cd 100644 --- a/src/poswin.h +++ b/src/poswin.h @@ -34,12 +34,19 @@ #include "client.h" typedef struct _Poswin Poswin; +typedef struct _PoswinWidgetClass PoswinWidgetClass; + struct _Poswin { - GtkWidget *window; + GtkWindow __parent__; GtkWidget *label; }; +struct _PoswinWidgetClass +{ + GtkWindowClass __parent__; +}; + Poswin *poswinCreate (GdkScreen *); void poswinSetPosition (Poswin *, Client *); _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits