Re: [virt-tools-list] [PATCH virt-viewer] window: Factor out common code for toolbar items

2016-06-28 Thread Eduardo Lima (Etrunko)
On 06/28/2016 12:16 PM, Fabiano Fidêncio wrote:
> On Tue, Jun 28, 2016 at 5:10 PM, Pavel Grunt  wrote:
>> 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

2016-06-28 Thread Eduardo Lima (Etrunko)
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

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 5:23 PM, Fabiano Fidêncio  wrote:
> 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'

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 5:23 PM, Fabiano Fidêncio  wrote:
> 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

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 5:22 PM, 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

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

2016-06-28 Thread Christophe Fergeau
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

2016-06-28 Thread Christophe Fergeau
Acked-by: Christophe Fergeau 

On 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

2016-06-28 Thread Fabiano Fidêncio
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


[virt-tools-list] [virt-viewer v2 1/4] timed-revealer: Fix "revealer" refcounting

2016-06-28 Thread Fabiano Fidêncio
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


[virt-tools-list] [virt-viewer v2 4/4] window: Don't take a reference on 'toolbar'

2016-06-28 Thread Fabiano Fidêncio
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


[virt-tools-list] [virt-viewer v2 3/4] timed-revealer: Inherit from GtkEventBox

2016-06-28 Thread Fabiano Fidêncio
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

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 5:10 PM, Pavel Grunt  wrote:
> 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

2016-06-28 Thread Pavel Grunt
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

2016-06-28 Thread Christophe Fergeau
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

2016-06-28 Thread Fabiano Fidêncio
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

2016-06-28 Thread Eduardo Lima (Etrunko)
On 06/28/2016 07:21 AM, Fabiano Fidêncio wrote:
> On Tue, Jun 28, 2016 at 12:08 PM, Pavel Grunt  wrote:
>> 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

2016-06-28 Thread Christophe Fergeau
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

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 2:03 PM, 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));
>  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

2016-06-28 Thread Pavel Grunt
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

2016-06-28 Thread Fabiano Fidêncio
On Tue, Jun 28, 2016 at 12:08 PM, Pavel Grunt  wrote:
> 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

2016-06-28 Thread Pavel Grunt
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

2016-06-28 Thread Fabiano Fidêncio
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

2016-06-28 Thread Daniel P. Berrange
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