Re: [virt-tools-list] [PATCH virt-viewer] window: Factor out common code for toolbar items
On 06/28/2016 12:16 PM, Fabiano Fidêncio wrote: > On Tue, Jun 28, 2016 at 5:10 PM, Pavel Gruntwrote: >> Create toolbar widget in the loop > > NACK from my side. > There is any gain on re-factoring a code that will be removed as soon > as we do the release. > Actually, it just makes my life harder in order to rebase Sagar's > patches on top of this change. Agreed, only a small comment below. > >> --- >> src/virt-viewer-window.c | 121 >> --- >> 1 file changed, 83 insertions(+), 38 deletions(-) >> >> diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c >> index 1ebb423..b276ae8 100644 >> --- a/src/virt-viewer-window.c >> +++ b/src/virt-viewer-window.c >> @@ -1062,56 +1062,101 @@ virt_viewer_window_menu_help_about(GtkWidget *menu >> G_GNUC_UNUSED, >> g_object_unref(G_OBJECT(about)); >> } >> >> +typedef struct { >> +GtkWidget *icon; >> +const gchar *icon_name; >> +const gchar *label; >> +const gchar *tooltip; >> +const gboolean sensitive; >> +const gboolean show_label; >> +const GCallback callback; >> +} VirtViewerToolbarButton; >> + >> +static void >> +virt_viewer_window_toolbar_add_button(VirtViewerWindow *self, >> + const VirtViewerToolbarButton >> *tb_button, >> + GtkWidget **dest_widget) >> +{ >> +VirtViewerWindowPrivate *priv = self->priv; >> +GtkToolItem *button = gtk_tool_button_new(tb_button->icon, >> tb_button->label); >> + >> +gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), >> tb_button->icon_name); >> +gtk_tool_item_set_tooltip_text(button, tb_button->tooltip); >> +gtk_tool_item_set_is_important(button, tb_button->show_label); >> +gtk_widget_set_sensitive(GTK_WIDGET(button), tb_button->sensitive); >> +gtk_widget_show_all(GTK_WIDGET(button)); >> +gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), button, 0); >> +g_signal_connect(button, "clicked", tb_button->callback, self); >> + >> +if (dest_widget != NULL) >> +*dest_widget = GTK_WIDGET(button); >> +} >> >> static void >> virt_viewer_window_toolbar_setup(VirtViewerWindow *self) >> { >> -GtkWidget *button; >> GtkWidget *overlay; >> VirtViewerWindowPrivate *priv = self->priv; >> +guint i; >> + >> +const struct { >> +const VirtViewerToolbarButton tb_button; >> +GtkWidget **dest_widget; >> +} toolbar_buttons[] = { >> +{ /* Close connection */ >> +{ >> +NULL, >> +"window-close", >> +NULL, >> +_("Disconnect"), >> +TRUE, >> +FALSE, >> +G_CALLBACK(virt_viewer_window_menu_file_quit), >> +}, >> +NULL, >> +},{ /* USB Device selection */ >> +{ >> + >> gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"), >> +NULL, >> +_("USB device selection"), >> +_("USB device selection"), >> +TRUE, >> +FALSE, >> + >> G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), >> +}, >> +>toolbar_usb_device_selection, >> +},{ /* Send key */ >> +{ >> +NULL, >> +"preferences-desktop-keyboard-shortcuts", >> +NULL, >> +_("Send key combination"), >> +FALSE, >> +FALSE, >> +G_CALLBACK(virt_viewer_window_toolbar_send_key), >> +}, >> +>toolbar_send_key, >> +},{ /* Leave fullscreen */ >> +{ >> +NULL, >> +"view-restore", >> +_("Leave fullscreen"), >> +_("Leave fullscreen"), >> +TRUE, >> +TRUE, >> +G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), >> +}, >> +NULL, >> +}, >> +}; In the case we did not have patches in the queue that makes this obsolete, it would be a good idea to have explicit field initializers for the items in the list. Besides being easier to read, you could save some lines of code for the NULL and FALSE ones. Regards, Eduardo. -- Eduardo de Barros Lima (Etrunko) Software Engineer - RedHat etru...@redhat.com ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
[virt-tools-list] [PATCH v2 virt-viewer] Get rid of deprecated functions to customize widget colors
Let's just stick with default theme colors. Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276 Signed-off-by: Eduardo Lima (Etrunko)--- src/virt-viewer-notebook.c | 13 ++--- src/virt-viewer-window.c | 10 -- 2 files changed, 2 insertions(+), 21 deletions(-) diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c index 420c914..8bb9977 100644 --- a/src/virt-viewer-notebook.c +++ b/src/virt-viewer-notebook.c @@ -71,25 +71,16 @@ static void virt_viewer_notebook_init (VirtViewerNotebook *self) { VirtViewerNotebookPrivate *priv; -GdkRGBA color; self->priv = GET_PRIVATE(self); priv = self->priv; -priv->status = gtk_label_new(""); gtk_notebook_set_show_tabs(GTK_NOTEBOOK(self), FALSE); gtk_notebook_set_show_border(GTK_NOTEBOOK(self), FALSE); + +priv->status = gtk_label_new(""); gtk_widget_show_all(priv->status); gtk_notebook_append_page(GTK_NOTEBOOK(self), priv->status, NULL); -gdk_rgba_parse(, "white"); -/* FIXME: - * This method has been deprecated in 3.16. - * For more details on how to deal with this in the future, please, see: - * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-color - * For the bug report about this deprecated function, please, see: - * https://bugs.freedesktop.org/show_bug.cgi?id=94276 - */ -gtk_widget_override_color(priv->status, GTK_STATE_FLAG_NORMAL, ); } void diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 1ebb423..c59fff5 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -297,7 +297,6 @@ virt_viewer_window_init (VirtViewerWindow *self) { VirtViewerWindowPrivate *priv; GtkWidget *vbox; -GdkRGBA color; GSList *accels; self->priv = GET_PRIVATE(self); @@ -340,15 +339,6 @@ virt_viewer_window_init (VirtViewerWindow *self) virt_viewer_window_toolbar_setup(self); gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(priv->notebook), TRUE, TRUE, 0); -gdk_rgba_parse(, "black"); -/* FIXME: - * This method has been deprecated in 3.16. - * For more details on how to deal with this in the future, please, see: - * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-background-color - * For the bug report about this deprecated function, please, see: - * https://bugs.freedesktop.org/show_bug.cgi?id=94276 - */ -gtk_widget_override_background_color(GTK_WIDGET(priv->notebook), GTK_STATE_FLAG_NORMAL, ); priv->window = GTK_WIDGET(gtk_builder_get_object(priv->builder, "viewer")); gtk_window_add_accel_group(GTK_WINDOW(priv->window), priv->accel_group); -- 2.5.5 ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [virt-viewer v2 2/4] timed-revealer: Don't release reference we don't own
On Tue, Jun 28, 2016 at 5:23 PM, Fabiano Fidênciowrote: > From: Christophe Fergeau > > VirtViewerTimedRevealer::evBox is created in > virt_viewer_timed_revealer_new() and will be passed to > gtk_container_add() through gtk_overlay_add_overlay(overlay, > virt_viewer_timed_revealer_get_overlay_widget(priv->revealer)) > > This means VirtViewerTimedRevealer does not own a reference on evBox, > and that it should not try to release it in > VirtViewerTimedRevealer::dispose() > --- > src/virt-viewer-timed-revealer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/virt-viewer-timed-revealer.c > b/src/virt-viewer-timed-revealer.c > index cad9ede..61b2d20 100644 > --- a/src/virt-viewer-timed-revealer.c > +++ b/src/virt-viewer-timed-revealer.c > @@ -125,7 +125,7 @@ virt_viewer_timed_revealer_dispose(GObject *object) > VirtViewerTimedRevealer *self = VIRT_VIEWER_TIMED_REVEALER(object); > VirtViewerTimedRevealerPrivate *priv = self->priv; > > -g_clear_object(>evBox); > +priv->evBox = NULL; > priv->revealer = NULL; > > if (priv->timeout_id) { > -- > 2.7.4 > > ___ > virt-tools-list mailing list > virt-tools-list@redhat.com > https://www.redhat.com/mailman/listinfo/virt-tools-list Acked-by: Fabiano Fidêncio ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [virt-viewer v2 4/4] window: Don't take a reference on 'toolbar'
On Tue, Jun 28, 2016 at 5:23 PM, Fabiano Fidênciowrote: > From: Christophe Fergeau > > VirtViewerTimedRevealer now derives from GtkEventBox/GtkContainer, so > it follows GTK+ conventions and takes ownership of the floating ref on > 'toolbar'. Since VirtViewerWindow and VirtViewerTimedRevealer will have > the same lifespan, we don't need to own a reference on toolbar in > VirtViewerWindow. > --- > src/virt-viewer-window.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index bf48516..503e230 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -200,7 +200,7 @@ virt_viewer_window_dispose (GObject *object) > priv->subtitle = NULL; > > g_value_unset(>accel_setting); > -g_clear_object(>toolbar); > +priv->toolbar = NULL; > > G_OBJECT_CLASS (virt_viewer_window_parent_class)->dispose (object); > } > @@ -1070,7 +1070,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) > GtkWidget *overlay; > VirtViewerWindowPrivate *priv = self->priv; > > -priv->toolbar = g_object_ref(gtk_toolbar_new()); > +priv->toolbar = gtk_toolbar_new(); > gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); > gtk_widget_set_no_show_all(priv->toolbar, TRUE); > gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), > GTK_TOOLBAR_BOTH_HORIZ); > -- > 2.7.4 > > ___ > virt-tools-list mailing list > virt-tools-list@redhat.com > https://www.redhat.com/mailman/listinfo/virt-tools-list Acked-by: Fabiano Fidêncio ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [virt-viewer v2 1/4] timed-revealer: Fix "revealer" refcounting
On Tue, Jun 28, 2016 at 5:22 PM, Fabiano Fidênciowrote: > From: Christophe Fergeau > > virt_viewer_timed_revealer_new calls gtk_container_add on the instance > returned by gtk_revealer_new so VirtViewerTimedRevealer does not own any > ref on this GtkRevealer instance. Unrefing it in _dispose() is thus wrong. > --- > src/virt-viewer-timed-revealer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/virt-viewer-timed-revealer.c > b/src/virt-viewer-timed-revealer.c > index 9124dad..cad9ede 100644 > --- a/src/virt-viewer-timed-revealer.c > +++ b/src/virt-viewer-timed-revealer.c > @@ -126,7 +126,7 @@ virt_viewer_timed_revealer_dispose(GObject *object) > VirtViewerTimedRevealerPrivate *priv = self->priv; > > g_clear_object(>evBox); > -g_clear_object(>revealer); > +priv->revealer = NULL; > > if (priv->timeout_id) { > g_source_remove(priv->timeout_id); > -- > 2.7.4 > > ___ > virt-tools-list mailing list > virt-tools-list@redhat.com > https://www.redhat.com/mailman/listinfo/virt-tools-list Acked-by: Fabiano Fidêncio (The backtrace can be added before pushing) ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [virt-viewer v2 1/4] timed-revealer: Fix "revealer" refcounting
Hey, if you want to add Pavel's backtrace to one of the commit logs, I think it was pointing at this g_clear_object line, so you could add it the the log here. Christophe On Tue, Jun 28, 2016 at 05:22:59PM +0200, Fabiano Fidêncio wrote: > From: Christophe Fergeau> > virt_viewer_timed_revealer_new calls gtk_container_add on the instance > returned by gtk_revealer_new so VirtViewerTimedRevealer does not own any > ref on this GtkRevealer instance. Unrefing it in _dispose() is thus wrong. > --- > src/virt-viewer-timed-revealer.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/virt-viewer-timed-revealer.c > b/src/virt-viewer-timed-revealer.c > index 9124dad..cad9ede 100644 > --- a/src/virt-viewer-timed-revealer.c > +++ b/src/virt-viewer-timed-revealer.c > @@ -126,7 +126,7 @@ virt_viewer_timed_revealer_dispose(GObject *object) > VirtViewerTimedRevealerPrivate *priv = self->priv; > > g_clear_object(>evBox); > -g_clear_object(>revealer); > +priv->revealer = NULL; > > if (priv->timeout_id) { > g_source_remove(priv->timeout_id); > -- > 2.7.4 > > ___ > virt-tools-list mailing list > virt-tools-list@redhat.com > https://www.redhat.com/mailman/listinfo/virt-tools-list signature.asc Description: PGP signature ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [virt-viewer v2 3/4] timed-revealer: Inherit from GtkEventBox
Acked-by: Christophe FergeauOn Tue, Jun 28, 2016 at 05:23:01PM +0200, Fabiano Fidêncio wrote: > As suggested by Christophe, inheriting from GtkEventBox instead of > having one instance of it as a member can help us to get rid of > virt_viewer_timed_revealer_get_overlay_widget(). > --- > src/virt-viewer-timed-revealer.c | 35 --- > src/virt-viewer-timed-revealer.h | 7 ++- > src/virt-viewer-window.c | 5 ++--- > 3 files changed, 16 insertions(+), 31 deletions(-) > > diff --git a/src/virt-viewer-timed-revealer.c > b/src/virt-viewer-timed-revealer.c > index 61b2d20..7892436 100644 > --- a/src/virt-viewer-timed-revealer.c > +++ b/src/virt-viewer-timed-revealer.c > @@ -25,7 +25,7 @@ > > #include "virt-viewer-timed-revealer.h" > > -G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, > G_TYPE_OBJECT) > +G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, > GTK_TYPE_EVENT_BOX) > > #define VIRT_VIEWER_TIMED_REVEALER_GET_PRIVATE(obj) \ > (G_TYPE_INSTANCE_GET_PRIVATE ((obj), VIRT_VIEWER_TYPE_TIMED_REVEALER, > VirtViewerTimedRevealerPrivate)) > @@ -36,7 +36,6 @@ struct _VirtViewerTimedRevealerPrivate > guint timeout_id; > > GtkWidget *revealer; > -GtkWidget *evBox; > }; > > static void > @@ -76,9 +75,9 @@ > virt_viewer_timed_revealer_schedule_unreveal_timeout(VirtViewerTimedRevealer > *se > } > > static gboolean > -virt_viewer_timed_revealer_enter_leave_notify(GtkWidget *evBox, > +virt_viewer_timed_revealer_enter_leave_notify(VirtViewerTimedRevealer *self, >GdkEventCrossing *event, > - VirtViewerTimedRevealer *self) > + gpointer user_data > G_GNUC_UNUSED) > { > VirtViewerTimedRevealerPrivate *priv = self->priv; > GdkDevice *device; > @@ -92,7 +91,7 @@ virt_viewer_timed_revealer_enter_leave_notify(GtkWidget > *evBox, > device = gdk_event_get_device((GdkEvent *)event); > > gdk_window_get_device_position(event->window, device, , , 0); > -gtk_widget_get_allocation(evBox, ); > +gtk_widget_get_allocation(GTK_WIDGET(self), ); > > entered = !!(x >= 0 && y >= 0 && x < allocation.width && y < > allocation.height); > > @@ -125,7 +124,6 @@ virt_viewer_timed_revealer_dispose(GObject *object) > VirtViewerTimedRevealer *self = VIRT_VIEWER_TIMED_REVEALER(object); > VirtViewerTimedRevealerPrivate *priv = self->priv; > > -priv->evBox = NULL; > priv->revealer = NULL; > > if (priv->timeout_id) { > @@ -170,20 +168,19 @@ virt_viewer_timed_revealer_new(GtkWidget *toolbar) > * the hidden toolbar. > */ > > -priv->evBox = gtk_event_box_new(); > -gtk_container_add(GTK_CONTAINER(priv->evBox), priv->revealer); > -gtk_widget_set_halign(priv->evBox, GTK_ALIGN_CENTER); > -gtk_widget_set_valign(priv->evBox, GTK_ALIGN_START); > -gtk_widget_show_all(priv->evBox); > +gtk_container_add(GTK_CONTAINER(self), priv->revealer); > +gtk_widget_set_halign(GTK_WIDGET(self), GTK_ALIGN_CENTER); > +gtk_widget_set_valign(GTK_WIDGET(self), GTK_ALIGN_START); > +gtk_widget_show_all(GTK_WIDGET(self)); > > -g_signal_connect(priv->evBox, > +g_signal_connect(self, > "enter-notify-event", > > G_CALLBACK(virt_viewer_timed_revealer_enter_leave_notify), > - self); > -g_signal_connect(priv->evBox, > + NULL); > +g_signal_connect(self, > "leave-notify-event", > > G_CALLBACK(virt_viewer_timed_revealer_enter_leave_notify), > - self); > + NULL); > > return self; > } > @@ -203,11 +200,3 @@ > virt_viewer_timed_revealer_force_reveal(VirtViewerTimedRevealer *self, > gtk_revealer_set_reveal_child(GTK_REVEALER(priv->revealer), fullscreen); > virt_viewer_timed_revealer_schedule_unreveal_timeout(self, 2000); > } > - > -GtkWidget * > -virt_viewer_timed_revealer_get_overlay_widget(VirtViewerTimedRevealer *self) > -{ > -g_return_val_if_fail(VIRT_VIEWER_IS_TIMED_REVEALER(self), NULL); > - > -return self->priv->evBox; > -} > diff --git a/src/virt-viewer-timed-revealer.h > b/src/virt-viewer-timed-revealer.h > index 6720a63..2305952 100644 > --- a/src/virt-viewer-timed-revealer.h > +++ b/src/virt-viewer-timed-revealer.h > @@ -49,12 +49,12 @@ G_BEGIN_DECLS > typedef struct _VirtViewerTimedRevealerPrivate > VirtViewerTimedRevealerPrivate; > > typedef struct { > -GObject parent; > +GtkEventBox parent; > VirtViewerTimedRevealerPrivate *priv; > } VirtViewerTimedRevealer; > > typedef struct { > -GObjectClass parent_class; > +GtkEventBoxClass parent_class; > } VirtViewerTimedRevealerClass; > > GType virt_viewer_timed_revealer_get_type (void); > @@ -66,9 +66,6
[virt-tools-list] [virt-viewer v2 2/4] timed-revealer: Don't release reference we don't own
From: Christophe FergeauVirtViewerTimedRevealer::evBox is created in virt_viewer_timed_revealer_new() and will be passed to gtk_container_add() through gtk_overlay_add_overlay(overlay, virt_viewer_timed_revealer_get_overlay_widget(priv->revealer)) This means VirtViewerTimedRevealer does not own a reference on evBox, and that it should not try to release it in VirtViewerTimedRevealer::dispose() --- src/virt-viewer-timed-revealer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/virt-viewer-timed-revealer.c b/src/virt-viewer-timed-revealer.c index cad9ede..61b2d20 100644 --- a/src/virt-viewer-timed-revealer.c +++ b/src/virt-viewer-timed-revealer.c @@ -125,7 +125,7 @@ virt_viewer_timed_revealer_dispose(GObject *object) VirtViewerTimedRevealer *self = VIRT_VIEWER_TIMED_REVEALER(object); VirtViewerTimedRevealerPrivate *priv = self->priv; -g_clear_object(>evBox); +priv->evBox = NULL; priv->revealer = NULL; if (priv->timeout_id) { -- 2.7.4 ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
[virt-tools-list] [virt-viewer v2 1/4] timed-revealer: Fix "revealer" refcounting
From: Christophe Fergeauvirt_viewer_timed_revealer_new calls gtk_container_add on the instance returned by gtk_revealer_new so VirtViewerTimedRevealer does not own any ref on this GtkRevealer instance. Unrefing it in _dispose() is thus wrong. --- src/virt-viewer-timed-revealer.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/virt-viewer-timed-revealer.c b/src/virt-viewer-timed-revealer.c index 9124dad..cad9ede 100644 --- a/src/virt-viewer-timed-revealer.c +++ b/src/virt-viewer-timed-revealer.c @@ -126,7 +126,7 @@ virt_viewer_timed_revealer_dispose(GObject *object) VirtViewerTimedRevealerPrivate *priv = self->priv; g_clear_object(>evBox); -g_clear_object(>revealer); +priv->revealer = NULL; if (priv->timeout_id) { g_source_remove(priv->timeout_id); -- 2.7.4 ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
[virt-tools-list] [virt-viewer v2 4/4] window: Don't take a reference on 'toolbar'
From: Christophe FergeauVirtViewerTimedRevealer now derives from GtkEventBox/GtkContainer, so it follows GTK+ conventions and takes ownership of the floating ref on 'toolbar'. Since VirtViewerWindow and VirtViewerTimedRevealer will have the same lifespan, we don't need to own a reference on toolbar in VirtViewerWindow. --- src/virt-viewer-window.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index bf48516..503e230 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -200,7 +200,7 @@ virt_viewer_window_dispose (GObject *object) priv->subtitle = NULL; g_value_unset(>accel_setting); -g_clear_object(>toolbar); +priv->toolbar = NULL; G_OBJECT_CLASS (virt_viewer_window_parent_class)->dispose (object); } @@ -1070,7 +1070,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) GtkWidget *overlay; VirtViewerWindowPrivate *priv = self->priv; -priv->toolbar = g_object_ref(gtk_toolbar_new()); +priv->toolbar = gtk_toolbar_new(); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); gtk_widget_set_no_show_all(priv->toolbar, TRUE); gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), GTK_TOOLBAR_BOTH_HORIZ); -- 2.7.4 ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
[virt-tools-list] [virt-viewer v2 3/4] timed-revealer: Inherit from GtkEventBox
As suggested by Christophe, inheriting from GtkEventBox instead of having one instance of it as a member can help us to get rid of virt_viewer_timed_revealer_get_overlay_widget(). --- src/virt-viewer-timed-revealer.c | 35 --- src/virt-viewer-timed-revealer.h | 7 ++- src/virt-viewer-window.c | 5 ++--- 3 files changed, 16 insertions(+), 31 deletions(-) diff --git a/src/virt-viewer-timed-revealer.c b/src/virt-viewer-timed-revealer.c index 61b2d20..7892436 100644 --- a/src/virt-viewer-timed-revealer.c +++ b/src/virt-viewer-timed-revealer.c @@ -25,7 +25,7 @@ #include "virt-viewer-timed-revealer.h" -G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, G_TYPE_OBJECT) +G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, GTK_TYPE_EVENT_BOX) #define VIRT_VIEWER_TIMED_REVEALER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), VIRT_VIEWER_TYPE_TIMED_REVEALER, VirtViewerTimedRevealerPrivate)) @@ -36,7 +36,6 @@ struct _VirtViewerTimedRevealerPrivate guint timeout_id; GtkWidget *revealer; -GtkWidget *evBox; }; static void @@ -76,9 +75,9 @@ virt_viewer_timed_revealer_schedule_unreveal_timeout(VirtViewerTimedRevealer *se } static gboolean -virt_viewer_timed_revealer_enter_leave_notify(GtkWidget *evBox, +virt_viewer_timed_revealer_enter_leave_notify(VirtViewerTimedRevealer *self, GdkEventCrossing *event, - VirtViewerTimedRevealer *self) + gpointer user_data G_GNUC_UNUSED) { VirtViewerTimedRevealerPrivate *priv = self->priv; GdkDevice *device; @@ -92,7 +91,7 @@ virt_viewer_timed_revealer_enter_leave_notify(GtkWidget *evBox, device = gdk_event_get_device((GdkEvent *)event); gdk_window_get_device_position(event->window, device, , , 0); -gtk_widget_get_allocation(evBox, ); +gtk_widget_get_allocation(GTK_WIDGET(self), ); entered = !!(x >= 0 && y >= 0 && x < allocation.width && y < allocation.height); @@ -125,7 +124,6 @@ virt_viewer_timed_revealer_dispose(GObject *object) VirtViewerTimedRevealer *self = VIRT_VIEWER_TIMED_REVEALER(object); VirtViewerTimedRevealerPrivate *priv = self->priv; -priv->evBox = NULL; priv->revealer = NULL; if (priv->timeout_id) { @@ -170,20 +168,19 @@ virt_viewer_timed_revealer_new(GtkWidget *toolbar) * the hidden toolbar. */ -priv->evBox = gtk_event_box_new(); -gtk_container_add(GTK_CONTAINER(priv->evBox), priv->revealer); -gtk_widget_set_halign(priv->evBox, GTK_ALIGN_CENTER); -gtk_widget_set_valign(priv->evBox, GTK_ALIGN_START); -gtk_widget_show_all(priv->evBox); +gtk_container_add(GTK_CONTAINER(self), priv->revealer); +gtk_widget_set_halign(GTK_WIDGET(self), GTK_ALIGN_CENTER); +gtk_widget_set_valign(GTK_WIDGET(self), GTK_ALIGN_START); +gtk_widget_show_all(GTK_WIDGET(self)); -g_signal_connect(priv->evBox, +g_signal_connect(self, "enter-notify-event", G_CALLBACK(virt_viewer_timed_revealer_enter_leave_notify), - self); -g_signal_connect(priv->evBox, + NULL); +g_signal_connect(self, "leave-notify-event", G_CALLBACK(virt_viewer_timed_revealer_enter_leave_notify), - self); + NULL); return self; } @@ -203,11 +200,3 @@ virt_viewer_timed_revealer_force_reveal(VirtViewerTimedRevealer *self, gtk_revealer_set_reveal_child(GTK_REVEALER(priv->revealer), fullscreen); virt_viewer_timed_revealer_schedule_unreveal_timeout(self, 2000); } - -GtkWidget * -virt_viewer_timed_revealer_get_overlay_widget(VirtViewerTimedRevealer *self) -{ -g_return_val_if_fail(VIRT_VIEWER_IS_TIMED_REVEALER(self), NULL); - -return self->priv->evBox; -} diff --git a/src/virt-viewer-timed-revealer.h b/src/virt-viewer-timed-revealer.h index 6720a63..2305952 100644 --- a/src/virt-viewer-timed-revealer.h +++ b/src/virt-viewer-timed-revealer.h @@ -49,12 +49,12 @@ G_BEGIN_DECLS typedef struct _VirtViewerTimedRevealerPrivate VirtViewerTimedRevealerPrivate; typedef struct { -GObject parent; +GtkEventBox parent; VirtViewerTimedRevealerPrivate *priv; } VirtViewerTimedRevealer; typedef struct { -GObjectClass parent_class; +GtkEventBoxClass parent_class; } VirtViewerTimedRevealerClass; GType virt_viewer_timed_revealer_get_type (void); @@ -66,9 +66,6 @@ void virt_viewer_timed_revealer_force_reveal(VirtViewerTimedRevealer *self, gboolean fullscreen); -GtkWidget * -virt_viewer_timed_revealer_get_overlay_widget(VirtViewerTimedRevealer *self); - G_END_DECLS #endif /* _VIRT_VIEWER_TIMED_REVEALER_H */ diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 1ebb423..bf48516 100644
Re: [virt-tools-list] [PATCH virt-viewer] window: Factor out common code for toolbar items
On Tue, Jun 28, 2016 at 5:10 PM, Pavel Gruntwrote: > Create toolbar widget in the loop NACK from my side. There is any gain on re-factoring a code that will be removed as soon as we do the release. Actually, it just makes my life harder in order to rebase Sagar's patches on top of this change. > --- > src/virt-viewer-window.c | 121 > --- > 1 file changed, 83 insertions(+), 38 deletions(-) > > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 1ebb423..b276ae8 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -1062,56 +1062,101 @@ virt_viewer_window_menu_help_about(GtkWidget *menu > G_GNUC_UNUSED, > g_object_unref(G_OBJECT(about)); > } > > +typedef struct { > +GtkWidget *icon; > +const gchar *icon_name; > +const gchar *label; > +const gchar *tooltip; > +const gboolean sensitive; > +const gboolean show_label; > +const GCallback callback; > +} VirtViewerToolbarButton; > + > +static void > +virt_viewer_window_toolbar_add_button(VirtViewerWindow *self, > + const VirtViewerToolbarButton > *tb_button, > + GtkWidget **dest_widget) > +{ > +VirtViewerWindowPrivate *priv = self->priv; > +GtkToolItem *button = gtk_tool_button_new(tb_button->icon, > tb_button->label); > + > +gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), > tb_button->icon_name); > +gtk_tool_item_set_tooltip_text(button, tb_button->tooltip); > +gtk_tool_item_set_is_important(button, tb_button->show_label); > +gtk_widget_set_sensitive(GTK_WIDGET(button), tb_button->sensitive); > +gtk_widget_show_all(GTK_WIDGET(button)); > +gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), button, 0); > +g_signal_connect(button, "clicked", tb_button->callback, self); > + > +if (dest_widget != NULL) > +*dest_widget = GTK_WIDGET(button); > +} > > static void > virt_viewer_window_toolbar_setup(VirtViewerWindow *self) > { > -GtkWidget *button; > GtkWidget *overlay; > VirtViewerWindowPrivate *priv = self->priv; > +guint i; > + > +const struct { > +const VirtViewerToolbarButton tb_button; > +GtkWidget **dest_widget; > +} toolbar_buttons[] = { > +{ /* Close connection */ > +{ > +NULL, > +"window-close", > +NULL, > +_("Disconnect"), > +TRUE, > +FALSE, > +G_CALLBACK(virt_viewer_window_menu_file_quit), > +}, > +NULL, > +},{ /* USB Device selection */ > +{ > + > gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"), > +NULL, > +_("USB device selection"), > +_("USB device selection"), > +TRUE, > +FALSE, > + > G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), > +}, > +>toolbar_usb_device_selection, > +},{ /* Send key */ > +{ > +NULL, > +"preferences-desktop-keyboard-shortcuts", > +NULL, > +_("Send key combination"), > +FALSE, > +FALSE, > +G_CALLBACK(virt_viewer_window_toolbar_send_key), > +}, > +>toolbar_send_key, > +},{ /* Leave fullscreen */ > +{ > +NULL, > +"view-restore", > +_("Leave fullscreen"), > +_("Leave fullscreen"), > +TRUE, > +TRUE, > +G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), > +}, > +NULL, > +}, > +}; > > priv->toolbar = g_object_ref(gtk_toolbar_new()); > gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); > gtk_widget_set_no_show_all(priv->toolbar, TRUE); > gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), > GTK_TOOLBAR_BOTH_HORIZ); > > -/* Close connection */ > -button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); > -gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "window-close"); > -gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Disconnect")); > -gtk_widget_show(button); > -gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM (button), > 0); > -g_signal_connect(button, "clicked", > G_CALLBACK(virt_viewer_window_menu_file_quit), self); > - > -/* USB Device selection */ > -button = > gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"); > -button = GTK_WIDGET(gtk_tool_button_new(button, NULL)); > -gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("USB device > selection")); > -
[virt-tools-list] [PATCH virt-viewer] window: Factor out common code for toolbar items
Create toolbar widget in the loop --- src/virt-viewer-window.c | 121 --- 1 file changed, 83 insertions(+), 38 deletions(-) diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 1ebb423..b276ae8 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -1062,56 +1062,101 @@ virt_viewer_window_menu_help_about(GtkWidget *menu G_GNUC_UNUSED, g_object_unref(G_OBJECT(about)); } +typedef struct { +GtkWidget *icon; +const gchar *icon_name; +const gchar *label; +const gchar *tooltip; +const gboolean sensitive; +const gboolean show_label; +const GCallback callback; +} VirtViewerToolbarButton; + +static void +virt_viewer_window_toolbar_add_button(VirtViewerWindow *self, + const VirtViewerToolbarButton *tb_button, + GtkWidget **dest_widget) +{ +VirtViewerWindowPrivate *priv = self->priv; +GtkToolItem *button = gtk_tool_button_new(tb_button->icon, tb_button->label); + +gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), tb_button->icon_name); +gtk_tool_item_set_tooltip_text(button, tb_button->tooltip); +gtk_tool_item_set_is_important(button, tb_button->show_label); +gtk_widget_set_sensitive(GTK_WIDGET(button), tb_button->sensitive); +gtk_widget_show_all(GTK_WIDGET(button)); +gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), button, 0); +g_signal_connect(button, "clicked", tb_button->callback, self); + +if (dest_widget != NULL) +*dest_widget = GTK_WIDGET(button); +} static void virt_viewer_window_toolbar_setup(VirtViewerWindow *self) { -GtkWidget *button; GtkWidget *overlay; VirtViewerWindowPrivate *priv = self->priv; +guint i; + +const struct { +const VirtViewerToolbarButton tb_button; +GtkWidget **dest_widget; +} toolbar_buttons[] = { +{ /* Close connection */ +{ +NULL, +"window-close", +NULL, +_("Disconnect"), +TRUE, +FALSE, +G_CALLBACK(virt_viewer_window_menu_file_quit), +}, +NULL, +},{ /* USB Device selection */ +{ + gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"), +NULL, +_("USB device selection"), +_("USB device selection"), +TRUE, +FALSE, +G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), +}, +>toolbar_usb_device_selection, +},{ /* Send key */ +{ +NULL, +"preferences-desktop-keyboard-shortcuts", +NULL, +_("Send key combination"), +FALSE, +FALSE, +G_CALLBACK(virt_viewer_window_toolbar_send_key), +}, +>toolbar_send_key, +},{ /* Leave fullscreen */ +{ +NULL, +"view-restore", +_("Leave fullscreen"), +_("Leave fullscreen"), +TRUE, +TRUE, +G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), +}, +NULL, +}, +}; priv->toolbar = g_object_ref(gtk_toolbar_new()); gtk_toolbar_set_show_arrow(GTK_TOOLBAR(priv->toolbar), FALSE); gtk_widget_set_no_show_all(priv->toolbar, TRUE); gtk_toolbar_set_style(GTK_TOOLBAR(priv->toolbar), GTK_TOOLBAR_BOTH_HORIZ); -/* Close connection */ -button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); -gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "window-close"); -gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("Disconnect")); -gtk_widget_show(button); -gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM (button), 0); -g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_quit), self); - -/* USB Device selection */ -button = gtk_image_new_from_resource(VIRT_VIEWER_RESOURCE_PREFIX"/icons/24x24/virt-viewer-usb.png"); -button = GTK_WIDGET(gtk_tool_button_new(button, NULL)); -gtk_tool_button_set_label(GTK_TOOL_BUTTON(button), _("USB device selection")); -gtk_tool_item_set_tooltip_text(GTK_TOOL_ITEM(button), _("USB device selection")); -gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0); -g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_menu_file_usb_device_selection), self); -priv->toolbar_usb_device_selection = button; -gtk_widget_show_all(button); - -/* Send key */ -button = GTK_WIDGET(gtk_tool_button_new(NULL, NULL)); -gtk_tool_button_set_icon_name(GTK_TOOL_BUTTON(button), "preferences-desktop-keyboard-shortcuts"); -
Re: [virt-tools-list] [PATCH] timed-revealer: Inherit from GtkEventBox
Hey, On Tue, Jun 28, 2016 at 04:18:30PM +0200, Fabiano Fidêncio wrote: > As suggested by Christophe, inheritting from GtkEventBox instead of > having one instance of it as a member can help us to get rid of > virt_viewer_timed_revealer_get_overlay_widget() and also makes more > natural that we take ownership of the GtkToolbar floating ref. > > This change also fixes the crash pointed by Pavel: Hmm, this fixes it because you made some refcounting changes at the same time as making VirtViewerTimedRevealer a GtkEventBox. Imo it would be better to move as many of these refcounting changes to a different commit as they are not strictly related to the changes made in this commit. Moreover, if the refcounting changes introduce problems, it will be much better if the commit where they are is small. Christophe > #0 0x73e92c9d in g_type_check_instance_is_fundamentally_a () at > /lib64/libgobject-2.0.so.0 > #1 0x73e722a5 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #2 0x0041ebe3 in virt_viewer_timed_revealer_dispose > (object=0x1127320) at virt-viewer-timed-revealer.c:128 > #3 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #4 0x0041c040 in virt_viewer_window_dispose (object=0x981f70) at > virt-viewer-window.c:191 > #5 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #6 0x00413a58 in virt_viewer_app_display_removed (nth= out>, self=0x680330) at virt-viewer-app.c:989 > #7 0x00413a58 in virt_viewer_app_display_removed > (session=, display=, self=0x680330) at > virt-viewer-app.c:1000 > #8 0x73e705e0 in g_cclosure_marshal_VOID__OBJECTv () at > /lib64/libgobject-2.0.so.0 #9 0x73e6d784 in _g_closure_invoke_va () > at /lib64/libgobject-2.0.so.0 > #10 0x73e88cd9 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #11 0x73e897eb in g_signal_emit_by_name () at > /lib64/libgobject-2.0.so.0 > #12 0x00418973 in virt_viewer_session_remove_display > (session=0x9c6de0, display=0x961a90) at virt-viewer-session.c:463 > #13 0x00420934 in destroy_display (data=) at > virt-viewer-session-spice.c:851 > #14 0x73b6d0eb in g_ptr_array_foreach () at /lib64/libglib-2.0.so.0 > #15 0x73b6d180 in ptr_array_free () at /lib64/libglib-2.0.so.0 > #16 0x0042072a in virt_viewer_session_spice_clear_displays > (self=0x9c6de0) at virt-viewer-session-spice.c:94 > #17 0x0042240d in virt_viewer_session_spice_close > (session=) at virt-viewer-session-spice.c:459 > #18 0x00414be5 in virt_viewer_app_quit (self=self@entry=0x680330) at > virt-viewer-app.c:285 > #19 0x00415500 in virt_viewer_app_maybe_quit (self=0x680330, > window=window@entry=0x981a90) at virt-viewer-app.c:481 > #20 0x0041c4ad in virt_viewer_window_delete (src=, > dummy=, self=0x981a90) at virt-viewer-window.c:771 > #21 0x761807f1 in _gtk_marshal_BOOLEAN__BOXEDv () at > /lib64/libgtk-3.so.0 > #22 0x73e6d784 in _g_closure_invoke_va () at > /lib64/libgobject-2.0.so.0 > #23 0x73e887b3 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #24 0x73e8933f in g_signal_emit () at /lib64/libgobject-2.0.so.0 > #25 0x762dde6c in gtk_widget_event_internal () at > /lib64/libgtk-3.so.0 > #26 0x7617f5ef in gtk_main_do_event () at /lib64/libgtk-3.so.0 > #27 0x75c7dd25 in _gdk_event_emit () at /lib64/libgdk-3.so.0 > #28 0x75cae672 in gdk_event_source_dispatch () at > /lib64/libgdk-3.so.0 > #29 0x73b9895a in g_main_context_dispatch () at > /lib64/libglib-2.0.so.0 > #30 0x73b98d10 in g_main_context_iterate.isra () at > /lib64/libglib-2.0.so.0 > #31 0x73b98dbc in g_main_context_iteration () at > /lib64/libglib-2.0.so.0 > #32 0x741643cd in g_application_run () at /lib64/libgio-2.0.so.0 > #33 0x0040fc1a in main (argc=3, argv=0x7fffdec8) at > virt-viewer-main.c:41 > > Signed-off-by: Fabiano Fidêncio> --- > src/virt-viewer-timed-revealer.c | 45 > +++- > src/virt-viewer-timed-revealer.h | 7 ++- > src/virt-viewer-window.c | 5 ++--- > 3 files changed, 25 insertions(+), 32 deletions(-) > > diff --git a/src/virt-viewer-timed-revealer.c > b/src/virt-viewer-timed-revealer.c > index 9124dad..f9f00ce 100644 > --- a/src/virt-viewer-timed-revealer.c > +++ b/src/virt-viewer-timed-revealer.c > @@ -25,7 +25,7 @@ > > #include "virt-viewer-timed-revealer.h" > > -G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, > G_TYPE_OBJECT) > +G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, > GTK_TYPE_EVENT_BOX) > > #define VIRT_VIEWER_TIMED_REVEALER_GET_PRIVATE(obj) \ > (G_TYPE_INSTANCE_GET_PRIVATE ((obj), VIRT_VIEWER_TYPE_TIMED_REVEALER, > VirtViewerTimedRevealerPrivate)) > @@ -36,7 +36,6 @@ struct
[virt-tools-list] [PATCH] timed-revealer: Inherit from GtkEventBox
As suggested by Christophe, inheritting from GtkEventBox instead of having one instance of it as a member can help us to get rid of virt_viewer_timed_revealer_get_overlay_widget() and also makes more natural that we take ownership of the GtkToolbar floating ref. This change also fixes the crash pointed by Pavel: #0 0x73e92c9d in g_type_check_instance_is_fundamentally_a () at /lib64/libgobject-2.0.so.0 #1 0x73e722a5 in g_object_unref () at /lib64/libgobject-2.0.so.0 #2 0x0041ebe3 in virt_viewer_timed_revealer_dispose (object=0x1127320) at virt-viewer-timed-revealer.c:128 #3 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 #4 0x0041c040 in virt_viewer_window_dispose (object=0x981f70) at virt-viewer-window.c:191 #5 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 #6 0x00413a58 in virt_viewer_app_display_removed (nth=, self=0x680330) at virt-viewer-app.c:989 #7 0x00413a58 in virt_viewer_app_display_removed (session=, display=, self=0x680330) at virt-viewer-app.c:1000 #8 0x73e705e0 in g_cclosure_marshal_VOID__OBJECTv () at /lib64/libgobject-2.0.so.0 #9 0x73e6d784 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0 #10 0x73e88cd9 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0 #11 0x73e897eb in g_signal_emit_by_name () at /lib64/libgobject-2.0.so.0 #12 0x00418973 in virt_viewer_session_remove_display (session=0x9c6de0, display=0x961a90) at virt-viewer-session.c:463 #13 0x00420934 in destroy_display (data=) at virt-viewer-session-spice.c:851 #14 0x73b6d0eb in g_ptr_array_foreach () at /lib64/libglib-2.0.so.0 #15 0x73b6d180 in ptr_array_free () at /lib64/libglib-2.0.so.0 #16 0x0042072a in virt_viewer_session_spice_clear_displays (self=0x9c6de0) at virt-viewer-session-spice.c:94 #17 0x0042240d in virt_viewer_session_spice_close (session=) at virt-viewer-session-spice.c:459 #18 0x00414be5 in virt_viewer_app_quit (self=self@entry=0x680330) at virt-viewer-app.c:285 #19 0x00415500 in virt_viewer_app_maybe_quit (self=0x680330, window=window@entry=0x981a90) at virt-viewer-app.c:481 #20 0x0041c4ad in virt_viewer_window_delete (src=, dummy=, self=0x981a90) at virt-viewer-window.c:771 #21 0x761807f1 in _gtk_marshal_BOOLEAN__BOXEDv () at /lib64/libgtk-3.so.0 #22 0x73e6d784 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0 #23 0x73e887b3 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0 #24 0x73e8933f in g_signal_emit () at /lib64/libgobject-2.0.so.0 #25 0x762dde6c in gtk_widget_event_internal () at /lib64/libgtk-3.so.0 #26 0x7617f5ef in gtk_main_do_event () at /lib64/libgtk-3.so.0 #27 0x75c7dd25 in _gdk_event_emit () at /lib64/libgdk-3.so.0 #28 0x75cae672 in gdk_event_source_dispatch () at /lib64/libgdk-3.so.0 #29 0x73b9895a in g_main_context_dispatch () at /lib64/libglib-2.0.so.0 #30 0x73b98d10 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0 #31 0x73b98dbc in g_main_context_iteration () at /lib64/libglib-2.0.so.0 #32 0x741643cd in g_application_run () at /lib64/libgio-2.0.so.0 #33 0x0040fc1a in main (argc=3, argv=0x7fffdec8) at virt-viewer-main.c:41 Signed-off-by: Fabiano Fidêncio--- src/virt-viewer-timed-revealer.c | 45 +++- src/virt-viewer-timed-revealer.h | 7 ++- src/virt-viewer-window.c | 5 ++--- 3 files changed, 25 insertions(+), 32 deletions(-) diff --git a/src/virt-viewer-timed-revealer.c b/src/virt-viewer-timed-revealer.c index 9124dad..f9f00ce 100644 --- a/src/virt-viewer-timed-revealer.c +++ b/src/virt-viewer-timed-revealer.c @@ -25,7 +25,7 @@ #include "virt-viewer-timed-revealer.h" -G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, G_TYPE_OBJECT) +G_DEFINE_TYPE (VirtViewerTimedRevealer, virt_viewer_timed_revealer, GTK_TYPE_EVENT_BOX) #define VIRT_VIEWER_TIMED_REVEALER_GET_PRIVATE(obj) \ (G_TYPE_INSTANCE_GET_PRIVATE ((obj), VIRT_VIEWER_TYPE_TIMED_REVEALER, VirtViewerTimedRevealerPrivate)) @@ -36,7 +36,6 @@ struct _VirtViewerTimedRevealerPrivate guint timeout_id; GtkWidget *revealer; -GtkWidget *evBox; }; static void @@ -76,9 +75,9 @@ virt_viewer_timed_revealer_schedule_unreveal_timeout(VirtViewerTimedRevealer *se } static gboolean -virt_viewer_timed_revealer_enter_leave_notify(GtkWidget *evBox, +virt_viewer_timed_revealer_enter_leave_notify(VirtViewerTimedRevealer *self, GdkEventCrossing *event, - VirtViewerTimedRevealer *self) + gpointer user_data G_GNUC_UNUSED) { VirtViewerTimedRevealerPrivate *priv = self->priv; GdkDevice
Re: [virt-tools-list] [PATCH] Get rid of deprecated functions to customize widget colors
On 06/28/2016 07:21 AM, Fabiano Fidêncio wrote: > On Tue, Jun 28, 2016 at 12:08 PM, Pavel Gruntwrote: >> Hi Eduardo, >> >> On Mon, 2016-06-27 at 18:00 -0300, Eduardo Lima (Etrunko) wrote: >>> Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276 >>> >>> Signed-off-by: Eduardo Lima (Etrunko) >>> --- >>> >>> As a result of commit cc455b7f916110d7cfae6b7af753349e070c9494, setting >>> custom color for background does not work anymore on my Fedora 23 >>> system. The status label still rendered with white color, but with the >>> background with default theme color (usually light grey), it has become >>> hard to read the text from the label. >>> >>> I talked to Fabiano who told me that everything was working as expected >>> with his recently upgraded Fedora 24 system. While trying to track and >>> fix the issue, I noticed that it will only happen if the notebook tabs >>> are hidden. If tabs are shown, the background color will be properly >>> set. >>> >>> I tracked down to Gtk+ some changes to GtkNotebook in recently released >>> version 3.20, which fixed the rendering of the custom background color, >>> with tabs hidden, but those could not be easily backported. Even though >>> it is a change of behavior in virt-viewer, I think it is really a minor >>> issue, and I decided to not spent too much time on this, so I put a >>> check for Gtk+ version to decide whether or not set the custom colors. >>> >>> Some screenshots to illustrate: >>> >>> Gtk+ > 3.20: >>> http://imgur.com/gpuMukA >>> >>> Gtk+ < 3.20: >>> >>> without this patch.: http://imgur.com/RdirSoX >>> with this patch: http://imgur.com/9LJNeNI >> >> I would make it more simple, stick with the system theme >> (ie http://imgur.com/9LJNeNI for all gtk versions) instead of introducing >> some >> css just for 3.20 (is it stable btw ;-) ?). It would simplify the code, imho >> it >> looks better and another gui tool from the family - virt-manager - uses it. >> >> What do you think ? > > Hmm. This solution is quite okay for me. > If the other people agree, I'd say to proceed with your suggestion then. > Oh yes, I am all in favor of keeping the default theme colors. -- Eduardo de Barros Lima (Etrunko) Software Engineer - RedHat etru...@redhat.com ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [PATCH virt-viewer] window: Keep reference on timed revealer
On Tue, Jun 28, 2016 at 02:03:02PM +0200, Pavel Grunt wrote: > Avoid crash when closing virt-viewer due to multiple unrefs in > virt_viewer_timed_revealer_dispose and virt_viewer_window_dispose: > #0 0x73e92c9d in g_type_check_instance_is_fundamentally_a () at > /lib64/libgobject-2.0.so.0 > #1 0x73e722a5 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #2 0x0041ebe3 in virt_viewer_timed_revealer_dispose > (object=0x1127320) at virt-viewer-timed-revealer.c:128 > #3 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #4 0x0041c040 in virt_viewer_window_dispose (object=0x981f70) at > virt-viewer-window.c:191 > #5 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #6 0x00413a58 in virt_viewer_app_display_removed (nth= out>, self=0x680330) at virt-viewer-app.c:989 > #7 0x00413a58 in virt_viewer_app_display_removed > (session=, display=, self=0x680330) at > virt-viewer-app.c:1000 > #8 0x73e705e0 in g_cclosure_marshal_VOID__OBJECTv () at > /lib64/libgobject-2.0.so.0 > #9 0x73e6d784 in _g_closure_invoke_va () at > /lib64/libgobject-2.0.so.0 > #10 0x73e88cd9 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #11 0x73e897eb in g_signal_emit_by_name () at > /lib64/libgobject-2.0.so.0 > #12 0x00418973 in virt_viewer_session_remove_display > (session=0x9c6de0, display=0x961a90) at virt-viewer-session.c:463 > #13 0x00420934 in destroy_display (data=) at > virt-viewer-session-spice.c:851 > #14 0x73b6d0eb in g_ptr_array_foreach () at /lib64/libglib-2.0.so.0 > #15 0x73b6d180 in ptr_array_free () at /lib64/libglib-2.0.so.0 > #16 0x0042072a in virt_viewer_session_spice_clear_displays > (self=0x9c6de0) at virt-viewer-session-spice.c:94 > #17 0x0042240d in virt_viewer_session_spice_close > (session=) at virt-viewer-session-spice.c:459 > #18 0x00414be5 in virt_viewer_app_quit (self=self@entry=0x680330) at > virt-viewer-app.c:285 > #19 0x00415500 in virt_viewer_app_maybe_quit (self=0x680330, > window=window@entry=0x981a90) at virt-viewer-app.c:481 > #20 0x0041c4ad in virt_viewer_window_delete (src=, > dummy=, self=0x981a90) at virt-viewer-window.c:771 > #21 0x761807f1 in _gtk_marshal_BOOLEAN__BOXEDv () at > /lib64/libgtk-3.so.0 > #22 0x73e6d784 in _g_closure_invoke_va () at > /lib64/libgobject-2.0.so.0 > #23 0x73e887b3 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #24 0x73e8933f in g_signal_emit () at /lib64/libgobject-2.0.so.0 > #25 0x762dde6c in gtk_widget_event_internal () at > /lib64/libgtk-3.so.0 > #26 0x7617f5ef in gtk_main_do_event () at /lib64/libgtk-3.so.0 > #27 0x75c7dd25 in _gdk_event_emit () at /lib64/libgdk-3.so.0 > #28 0x75cae672 in gdk_event_source_dispatch () at > /lib64/libgdk-3.so.0 > #29 0x73b9895a in g_main_context_dispatch () at > /lib64/libglib-2.0.so.0 > #30 0x73b98d10 in g_main_context_iterate.isra () at > /lib64/libglib-2.0.so.0 > #31 0x73b98dbc in g_main_context_iteration () at > /lib64/libglib-2.0.so.0 > #32 0x741643cd in g_application_run () at /lib64/libgio-2.0.so.0 > #33 0x0040fc1a in main (argc=3, argv=0x7fffdec8) at > virt-viewer-main.c:41 > > Fixes: cc455b7f916110d7cfae6b7af753349e070c9494 > --- > src/virt-viewer-window.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 1ebb423..f78df03 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -1113,7 +1113,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) > gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0); > g_signal_connect(button, "clicked", > G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), self); > > -priv->revealer = virt_viewer_timed_revealer_new(priv->toolbar); > +priv->revealer = > g_object_ref_sink(virt_viewer_timed_revealer_new(priv->toolbar)); VirtViewerTimedRevealer is not a gtk+ widget, so _ref_sink() is odd. After this VirtViewerWindow will have 2 refs on VirtViewerTimedRevealer, so it seems the crash above is avoided because VirtViewerTimedRevealer::dispose is never going to be called? The root cause of the crash above seems to be in VirtViewerTimedRevealer which does: priv->revealer = gtk_revealer_new(); gtk_container_add(GTK_CONTAINER(priv->revealer), toolbar); in _new() and then in _dispose(): g_clear_object(>revealer) gtk_container_add() will have taken ownership of the revealer floating ref, so the g_clear_object() should not be done. Alternatively, you can _ref_sink() the GtkRevealer returned by gtk_revealer_new() to own a ref on it. A similar issue seems to be occurring with self->priv->evBox since virt-viewer-window.c calls
Re: [virt-tools-list] [PATCH virt-viewer] window: Keep reference on timed revealer
On Tue, Jun 28, 2016 at 2:03 PM, Pavel Gruntwrote: > Avoid crash when closing virt-viewer due to multiple unrefs in > virt_viewer_timed_revealer_dispose and virt_viewer_window_dispose: > #0 0x73e92c9d in g_type_check_instance_is_fundamentally_a () at > /lib64/libgobject-2.0.so.0 > #1 0x73e722a5 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #2 0x0041ebe3 in virt_viewer_timed_revealer_dispose > (object=0x1127320) at virt-viewer-timed-revealer.c:128 > #3 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #4 0x0041c040 in virt_viewer_window_dispose (object=0x981f70) at > virt-viewer-window.c:191 > #5 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 > #6 0x00413a58 in virt_viewer_app_display_removed (nth= out>, self=0x680330) at virt-viewer-app.c:989 > #7 0x00413a58 in virt_viewer_app_display_removed > (session=, display=, self=0x680330) at > virt-viewer-app.c:1000 > #8 0x73e705e0 in g_cclosure_marshal_VOID__OBJECTv () at > /lib64/libgobject-2.0.so.0 > #9 0x73e6d784 in _g_closure_invoke_va () at > /lib64/libgobject-2.0.so.0 > #10 0x73e88cd9 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #11 0x73e897eb in g_signal_emit_by_name () at > /lib64/libgobject-2.0.so.0 > #12 0x00418973 in virt_viewer_session_remove_display > (session=0x9c6de0, display=0x961a90) at virt-viewer-session.c:463 > #13 0x00420934 in destroy_display (data=) at > virt-viewer-session-spice.c:851 > #14 0x73b6d0eb in g_ptr_array_foreach () at /lib64/libglib-2.0.so.0 > #15 0x73b6d180 in ptr_array_free () at /lib64/libglib-2.0.so.0 > #16 0x0042072a in virt_viewer_session_spice_clear_displays > (self=0x9c6de0) at virt-viewer-session-spice.c:94 > #17 0x0042240d in virt_viewer_session_spice_close > (session=) at virt-viewer-session-spice.c:459 > #18 0x00414be5 in virt_viewer_app_quit (self=self@entry=0x680330) at > virt-viewer-app.c:285 > #19 0x00415500 in virt_viewer_app_maybe_quit (self=0x680330, > window=window@entry=0x981a90) at virt-viewer-app.c:481 > #20 0x0041c4ad in virt_viewer_window_delete (src=, > dummy=, self=0x981a90) at virt-viewer-window.c:771 > #21 0x761807f1 in _gtk_marshal_BOOLEAN__BOXEDv () at > /lib64/libgtk-3.so.0 > #22 0x73e6d784 in _g_closure_invoke_va () at > /lib64/libgobject-2.0.so.0 > #23 0x73e887b3 in g_signal_emit_valist () at > /lib64/libgobject-2.0.so.0 > #24 0x73e8933f in g_signal_emit () at /lib64/libgobject-2.0.so.0 > #25 0x762dde6c in gtk_widget_event_internal () at > /lib64/libgtk-3.so.0 > #26 0x7617f5ef in gtk_main_do_event () at /lib64/libgtk-3.so.0 > #27 0x75c7dd25 in _gdk_event_emit () at /lib64/libgdk-3.so.0 > #28 0x75cae672 in gdk_event_source_dispatch () at > /lib64/libgdk-3.so.0 > #29 0x73b9895a in g_main_context_dispatch () at > /lib64/libglib-2.0.so.0 > #30 0x73b98d10 in g_main_context_iterate.isra () at > /lib64/libglib-2.0.so.0 > #31 0x73b98dbc in g_main_context_iteration () at > /lib64/libglib-2.0.so.0 > #32 0x741643cd in g_application_run () at /lib64/libgio-2.0.so.0 > #33 0x0040fc1a in main (argc=3, argv=0x7fffdec8) at > virt-viewer-main.c:41 > > Fixes: cc455b7f916110d7cfae6b7af753349e070c9494 > --- > src/virt-viewer-window.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 1ebb423..f78df03 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -1113,7 +1113,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) > gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0); > g_signal_connect(button, "clicked", > G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), self); > > -priv->revealer = virt_viewer_timed_revealer_new(priv->toolbar); > +priv->revealer = > g_object_ref_sink(virt_viewer_timed_revealer_new(priv->toolbar)); > overlay = GTK_WIDGET(gtk_builder_get_object(priv->builder, > "viewer-overlay")); > gtk_overlay_add_overlay(GTK_OVERLAY(overlay), > > virt_viewer_timed_revealer_get_overlay_widget(priv->revealer)); > -- > 2.9.0 > > ___ > virt-tools-list mailing list > virt-tools-list@redhat.com > https://www.redhat.com/mailman/listinfo/virt-tools-list Acked-by: Fabiano Fidêncio ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
[virt-tools-list] [PATCH virt-viewer] window: Keep reference on timed revealer
Avoid crash when closing virt-viewer due to multiple unrefs in virt_viewer_timed_revealer_dispose and virt_viewer_window_dispose: #0 0x73e92c9d in g_type_check_instance_is_fundamentally_a () at /lib64/libgobject-2.0.so.0 #1 0x73e722a5 in g_object_unref () at /lib64/libgobject-2.0.so.0 #2 0x0041ebe3 in virt_viewer_timed_revealer_dispose (object=0x1127320) at virt-viewer-timed-revealer.c:128 #3 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 #4 0x0041c040 in virt_viewer_window_dispose (object=0x981f70) at virt-viewer-window.c:191 #5 0x73e723b6 in g_object_unref () at /lib64/libgobject-2.0.so.0 #6 0x00413a58 in virt_viewer_app_display_removed (nth=, self=0x680330) at virt-viewer-app.c:989 #7 0x00413a58 in virt_viewer_app_display_removed (session=, display=, self=0x680330) at virt-viewer-app.c:1000 #8 0x73e705e0 in g_cclosure_marshal_VOID__OBJECTv () at /lib64/libgobject-2.0.so.0 #9 0x73e6d784 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0 #10 0x73e88cd9 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0 #11 0x73e897eb in g_signal_emit_by_name () at /lib64/libgobject-2.0.so.0 #12 0x00418973 in virt_viewer_session_remove_display (session=0x9c6de0, display=0x961a90) at virt-viewer-session.c:463 #13 0x00420934 in destroy_display (data=) at virt-viewer-session-spice.c:851 #14 0x73b6d0eb in g_ptr_array_foreach () at /lib64/libglib-2.0.so.0 #15 0x73b6d180 in ptr_array_free () at /lib64/libglib-2.0.so.0 #16 0x0042072a in virt_viewer_session_spice_clear_displays (self=0x9c6de0) at virt-viewer-session-spice.c:94 #17 0x0042240d in virt_viewer_session_spice_close (session=) at virt-viewer-session-spice.c:459 #18 0x00414be5 in virt_viewer_app_quit (self=self@entry=0x680330) at virt-viewer-app.c:285 #19 0x00415500 in virt_viewer_app_maybe_quit (self=0x680330, window=window@entry=0x981a90) at virt-viewer-app.c:481 #20 0x0041c4ad in virt_viewer_window_delete (src=, dummy=, self=0x981a90) at virt-viewer-window.c:771 #21 0x761807f1 in _gtk_marshal_BOOLEAN__BOXEDv () at /lib64/libgtk-3.so.0 #22 0x73e6d784 in _g_closure_invoke_va () at /lib64/libgobject-2.0.so.0 #23 0x73e887b3 in g_signal_emit_valist () at /lib64/libgobject-2.0.so.0 #24 0x73e8933f in g_signal_emit () at /lib64/libgobject-2.0.so.0 #25 0x762dde6c in gtk_widget_event_internal () at /lib64/libgtk-3.so.0 #26 0x7617f5ef in gtk_main_do_event () at /lib64/libgtk-3.so.0 #27 0x75c7dd25 in _gdk_event_emit () at /lib64/libgdk-3.so.0 #28 0x75cae672 in gdk_event_source_dispatch () at /lib64/libgdk-3.so.0 #29 0x73b9895a in g_main_context_dispatch () at /lib64/libglib-2.0.so.0 #30 0x73b98d10 in g_main_context_iterate.isra () at /lib64/libglib-2.0.so.0 #31 0x73b98dbc in g_main_context_iteration () at /lib64/libglib-2.0.so.0 #32 0x741643cd in g_application_run () at /lib64/libgio-2.0.so.0 #33 0x0040fc1a in main (argc=3, argv=0x7fffdec8) at virt-viewer-main.c:41 Fixes: cc455b7f916110d7cfae6b7af753349e070c9494 --- src/virt-viewer-window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c index 1ebb423..f78df03 100644 --- a/src/virt-viewer-window.c +++ b/src/virt-viewer-window.c @@ -1113,7 +1113,7 @@ virt_viewer_window_toolbar_setup(VirtViewerWindow *self) gtk_toolbar_insert(GTK_TOOLBAR(priv->toolbar), GTK_TOOL_ITEM(button), 0); g_signal_connect(button, "clicked", G_CALLBACK(virt_viewer_window_toolbar_leave_fullscreen), self); -priv->revealer = virt_viewer_timed_revealer_new(priv->toolbar); +priv->revealer = g_object_ref_sink(virt_viewer_timed_revealer_new(priv->toolbar)); overlay = GTK_WIDGET(gtk_builder_get_object(priv->builder, "viewer-overlay")); gtk_overlay_add_overlay(GTK_OVERLAY(overlay), virt_viewer_timed_revealer_get_overlay_widget(priv->revealer)); -- 2.9.0 ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [PATCH] Get rid of deprecated functions to customize widget colors
On Tue, Jun 28, 2016 at 12:08 PM, Pavel Gruntwrote: > Hi Eduardo, > > On Mon, 2016-06-27 at 18:00 -0300, Eduardo Lima (Etrunko) wrote: >> Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276 >> >> Signed-off-by: Eduardo Lima (Etrunko) >> --- >> >> As a result of commit cc455b7f916110d7cfae6b7af753349e070c9494, setting >> custom color for background does not work anymore on my Fedora 23 >> system. The status label still rendered with white color, but with the >> background with default theme color (usually light grey), it has become >> hard to read the text from the label. >> >> I talked to Fabiano who told me that everything was working as expected >> with his recently upgraded Fedora 24 system. While trying to track and >> fix the issue, I noticed that it will only happen if the notebook tabs >> are hidden. If tabs are shown, the background color will be properly >> set. >> >> I tracked down to Gtk+ some changes to GtkNotebook in recently released >> version 3.20, which fixed the rendering of the custom background color, >> with tabs hidden, but those could not be easily backported. Even though >> it is a change of behavior in virt-viewer, I think it is really a minor >> issue, and I decided to not spent too much time on this, so I put a >> check for Gtk+ version to decide whether or not set the custom colors. >> >> Some screenshots to illustrate: >> >> Gtk+ > 3.20: >> http://imgur.com/gpuMukA >> >> Gtk+ < 3.20: >> >> without this patch.: http://imgur.com/RdirSoX >> with this patch: http://imgur.com/9LJNeNI > > I would make it more simple, stick with the system theme > (ie http://imgur.com/9LJNeNI for all gtk versions) instead of introducing some > css just for 3.20 (is it stable btw ;-) ?). It would simplify the code, imho > it > looks better and another gui tool from the family - virt-manager - uses it. > > What do you think ? Hmm. This solution is quite okay for me. If the other people agree, I'd say to proceed with your suggestion then. Best Regards, -- Fabiano Fidêncio ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list
Re: [virt-tools-list] [PATCH] Get rid of deprecated functions to customize widget colors
Hi Eduardo, On Mon, 2016-06-27 at 18:00 -0300, Eduardo Lima (Etrunko) wrote: > Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276 > > Signed-off-by: Eduardo Lima (Etrunko)> --- > > As a result of commit cc455b7f916110d7cfae6b7af753349e070c9494, setting > custom color for background does not work anymore on my Fedora 23 > system. The status label still rendered with white color, but with the > background with default theme color (usually light grey), it has become > hard to read the text from the label. > > I talked to Fabiano who told me that everything was working as expected > with his recently upgraded Fedora 24 system. While trying to track and > fix the issue, I noticed that it will only happen if the notebook tabs > are hidden. If tabs are shown, the background color will be properly > set. > > I tracked down to Gtk+ some changes to GtkNotebook in recently released > version 3.20, which fixed the rendering of the custom background color, > with tabs hidden, but those could not be easily backported. Even though > it is a change of behavior in virt-viewer, I think it is really a minor > issue, and I decided to not spent too much time on this, so I put a > check for Gtk+ version to decide whether or not set the custom colors. > > Some screenshots to illustrate: > > Gtk+ > 3.20: > http://imgur.com/gpuMukA > > Gtk+ < 3.20: > > without this patch.: http://imgur.com/RdirSoX > with this patch: http://imgur.com/9LJNeNI I would make it more simple, stick with the system theme (ie http://imgur.com/9LJNeNI for all gtk versions) instead of introducing some css just for 3.20 (is it stable btw ;-) ?). It would simplify the code, imho it looks better and another gui tool from the family - virt-manager - uses it. What do you think ? Pavel > > --- > src/virt-viewer-notebook.c | 25 ++--- > src/virt-viewer-window.c | 10 -- > 2 files changed, 14 insertions(+), 21 deletions(-) > > diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c > index 420c914..f02779c 100644 > --- a/src/virt-viewer-notebook.c > +++ b/src/virt-viewer-notebook.c > @@ -71,25 +71,28 @@ static void > virt_viewer_notebook_init (VirtViewerNotebook *self) > { > VirtViewerNotebookPrivate *priv; > -GdkRGBA color; > > self->priv = GET_PRIVATE(self); > priv = self->priv; > > -priv->status = gtk_label_new(""); > +/* Check for Gtk+ 3.20 to set the custom colors, because with older > versions > + * it the background color will not be set correctly, so we will end up > with > + * the default theme color for background (usually light grey), while the > + * foreground text color is white. > + */ > +if (gtk_check_version(3,20,0) == NULL) { > +GtkStyleContext *style = > gtk_widget_get_style_context(GTK_WIDGET(self)); > +GtkCssProvider *css = gtk_css_provider_new(); > +gtk_css_provider_load_from_data(css, "* { background-color: black; > color: white; }", -1, NULL); > +gtk_style_context_add_provider(style, GTK_STYLE_PROVIDER(css), > GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); > +} > + > gtk_notebook_set_show_tabs(GTK_NOTEBOOK(self), FALSE); > gtk_notebook_set_show_border(GTK_NOTEBOOK(self), FALSE); > + > +priv->status = gtk_label_new(""); > gtk_widget_show_all(priv->status); > gtk_notebook_append_page(GTK_NOTEBOOK(self), priv->status, NULL); > -gdk_rgba_parse(, "white"); > -/* FIXME: > - * This method has been deprecated in 3.16. > - * For more details on how to deal with this in the future, please, see: > - * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-over > ride-color > - * For the bug report about this deprecated function, please, see: > - * https://bugs.freedesktop.org/show_bug.cgi?id=94276 > - */ > -gtk_widget_override_color(priv->status, GTK_STATE_FLAG_NORMAL, ); > } > > void > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 1ebb423..c59fff5 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -297,7 +297,6 @@ virt_viewer_window_init (VirtViewerWindow *self) > { > VirtViewerWindowPrivate *priv; > GtkWidget *vbox; > -GdkRGBA color; > GSList *accels; > > self->priv = GET_PRIVATE(self); > @@ -340,15 +339,6 @@ virt_viewer_window_init (VirtViewerWindow *self) > virt_viewer_window_toolbar_setup(self); > > gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(priv->notebook), TRUE, TRUE, > 0); > -gdk_rgba_parse(, "black"); > -/* FIXME: > - * This method has been deprecated in 3.16. > - * For more details on how to deal with this in the future, please, see: > - * https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-over > ride-background-color > - * For the bug report about this deprecated function, please, see: > - * https://bugs.freedesktop.org/show_bug.cgi?id=94276 > - */ > -
Re: [virt-tools-list] [PATCH] Get rid of deprecated functions to customize widget colors
Etrunko, On Mon, Jun 27, 2016 at 11:00 PM, Eduardo Lima (Etrunko)wrote: > Fixes https://bugs.freedesktop.org/show_bug.cgi?id=94276 > > Signed-off-by: Eduardo Lima (Etrunko) > --- > > As a result of commit cc455b7f916110d7cfae6b7af753349e070c9494, setting > custom color for background does not work anymore on my Fedora 23 > system. The status label still rendered with white color, but with the > background with default theme color (usually light grey), it has become > hard to read the text from the label. > > I talked to Fabiano who told me that everything was working as expected > with his recently upgraded Fedora 24 system. While trying to track and > fix the issue, I noticed that it will only happen if the notebook tabs > are hidden. If tabs are shown, the background color will be properly > set. > > I tracked down to Gtk+ some changes to GtkNotebook in recently released > version 3.20, which fixed the rendering of the custom background color, > with tabs hidden, but those could not be easily backported. Do you have the commit hash? Would be nice to have it in the commit log. > Even though > it is a change of behavior in virt-viewer, I think it is really a minor > issue, and I decided to not spent too much time on this, so I put a > check for Gtk+ version to decide whether or not set the custom colors. > > Some screenshots to illustrate: > > Gtk+ > 3.20: > http://imgur.com/gpuMukA > > Gtk+ < 3.20: > > without this patch.: http://imgur.com/RdirSoX > with this patch: http://imgur.com/9LJNeNI > I really don't like to workaround Gtk+ issues on our side, but in this case it seems to be the way to go. Daniel, Jonathon, Pavel ... I want to hear from you guys here as well. > --- > src/virt-viewer-notebook.c | 25 ++--- > src/virt-viewer-window.c | 10 -- > 2 files changed, 14 insertions(+), 21 deletions(-) > > diff --git a/src/virt-viewer-notebook.c b/src/virt-viewer-notebook.c > index 420c914..f02779c 100644 > --- a/src/virt-viewer-notebook.c > +++ b/src/virt-viewer-notebook.c > @@ -71,25 +71,28 @@ static void > virt_viewer_notebook_init (VirtViewerNotebook *self) > { > VirtViewerNotebookPrivate *priv; > -GdkRGBA color; > > self->priv = GET_PRIVATE(self); > priv = self->priv; > > -priv->status = gtk_label_new(""); > +/* Check for Gtk+ 3.20 to set the custom colors, because with older > versions > + * it the background color will not be set correctly, so we will end up > with > + * the default theme color for background (usually light grey), while the > + * foreground text color is white. > + */ > +if (gtk_check_version(3,20,0) == NULL) { Please, use the compile time check instead of the runtime one. #if GTK_CHECK_VERSION(3,20,0) ... > +GtkStyleContext *style = > gtk_widget_get_style_context(GTK_WIDGET(self)); > +GtkCssProvider *css = gtk_css_provider_new(); > +gtk_css_provider_load_from_data(css, "* { background-color: black; > color: white; }", -1, NULL); > +gtk_style_context_add_provider(style, GTK_STYLE_PROVIDER(css), > GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); > +} > + > gtk_notebook_set_show_tabs(GTK_NOTEBOOK(self), FALSE); > gtk_notebook_set_show_border(GTK_NOTEBOOK(self), FALSE); > + > +priv->status = gtk_label_new(""); > gtk_widget_show_all(priv->status); > gtk_notebook_append_page(GTK_NOTEBOOK(self), priv->status, NULL); > -gdk_rgba_parse(, "white"); > -/* FIXME: > - * This method has been deprecated in 3.16. > - * For more details on how to deal with this in the future, please, see: > - * > https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-color > - * For the bug report about this deprecated function, please, see: > - * https://bugs.freedesktop.org/show_bug.cgi?id=94276 > - */ > -gtk_widget_override_color(priv->status, GTK_STATE_FLAG_NORMAL, ); > } > > void > diff --git a/src/virt-viewer-window.c b/src/virt-viewer-window.c > index 1ebb423..c59fff5 100644 > --- a/src/virt-viewer-window.c > +++ b/src/virt-viewer-window.c > @@ -297,7 +297,6 @@ virt_viewer_window_init (VirtViewerWindow *self) > { > VirtViewerWindowPrivate *priv; > GtkWidget *vbox; > -GdkRGBA color; > GSList *accels; > > self->priv = GET_PRIVATE(self); > @@ -340,15 +339,6 @@ virt_viewer_window_init (VirtViewerWindow *self) > virt_viewer_window_toolbar_setup(self); > > gtk_box_pack_end(GTK_BOX(vbox), GTK_WIDGET(priv->notebook), TRUE, TRUE, > 0); > -gdk_rgba_parse(, "black"); > -/* FIXME: > - * This method has been deprecated in 3.16. > - * For more details on how to deal with this in the future, please, see: > - * > https://developer.gnome.org/gtk3/stable/GtkWidget.html#gtk-widget-override-background-color > - * For the bug report about this deprecated function, please, see: > - *
Re: [virt-tools-list] [PATCH virt-viewer] package: Add appdata metadata for Gnome Software
On Mon, Jun 27, 2016 at 05:20:54PM +0200, Lukáš Venhoda wrote: > Adds metadata to be used with Gnome Software. > Includes name, summary, description and three screenshots of remote-viewer. > --- > data/Makefile.am | 9 +++-- > data/remote-viewer.appdata.xml.in | 29 + > po/POTFILES.in| 1 + > virt-viewer.spec.in | 1 + > 4 files changed, 38 insertions(+), 2 deletions(-) > create mode 100644 data/remote-viewer.appdata.xml.in ACK Regards, Daniel -- |: http://berrange.com -o-http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| ___ virt-tools-list mailing list virt-tools-list@redhat.com https://www.redhat.com/mailman/listinfo/virt-tools-list