[Spice-devel] [RFC spice-gtk v3 1/1] Gstreamer: Use GstVideoOverlay if possible

Frediano Ziglio fziglio at redhat.com
Thu May 17 11:50:34 UTC 2018


> 
> On Wed, May 16, 2018 at 3:54 PM, Frediano Ziglio <fziglio at redhat.com> wrote:
> >>
> >> On Wed, May 16, 2018 at 10:46:35AM +0200, Christophe Fergeau wrote:
> >> > On Wed, May 16, 2018 at 10:43:20AM +0200, Christophe Fergeau wrote:
> >> > > On Wed, May 16, 2018 at 10:23:01AM +0300, Snir Sheriber wrote:
> >> > > Yes, indeed, this is similar to what you were doing in earlier
> >> > > iterations.
> >> > >
> >> > > > I personally really like the current flow of the request for handle
> >> > > > using the signal and getting it as a response, avoiding of setting
> >> > > > and getting an handle from different components.
> >> > >
> >> > > Using signals as some generic way of calling a getter on some unknown
> >> > > class is rather unusual, and feels like something you should not
> >> > > really
> >> > > be using signals for.
> >> >
> >> > Just realized, this change is most likely an ABI break:
> >>
> >> (I promise I'll stop replying to myself :d). Not sure we are supporting
> >> inheritance from SpiceDisplayChannel, nor that it makes sense, so maybe
> >> not a big problem.
> >>
> >> Christophe
> >>
> >
> > Then class should be declare final is possible and details removed from
> > public interface.
> > Looking also at 941f4adf1322a5d2548af676059003df17613b47 seems to confirm
> > that this class was never meant to be inherited.
> 
> That's a commit from 0.1 era ;)
> 

Yes, you are right.
I though I looked in the past and found another ABI breakage more recent.

> We may have made some mistakes, but in theory, we bumped
> major/minor/etc correctly enough whenever adding/modifying/removing
> interface (breaking ABI).
> 
> During next break (some day), we may use the opportunity to make make
> most channel classes final. This is not a priority though. In the
> meantime, we don't need to add class signal handlers, and simply use
> the private struct for data.
> 

>From g_signal_new documentation:

class_offset
The offset of the function pointer in the class structure for this type. Used to invoke a class method generically.
Pass 0 to not associate a class method slot with this signal.

I suggested as a follow up to make this signal "private" not making the documentation
public. I think we don't need to use this signal as a method so I think we can remove
the field in SpiceDisplayChannelClass and pass 0 to avoid ABI break, kind of:

diff --git a/src/channel-display.c b/src/channel-display.c
index 3f2fb3dc..1c0021e8 100644
--- a/src/channel-display.c
+++ b/src/channel-display.c
@@ -470,9 +470,7 @@ static void spice_display_channel_class_init(SpiceDisplayChannelClass *klass)
     signals[SPICE_DISPLAY_STREAMING_MODE] =
         g_signal_new("streaming-mode",
                      G_OBJECT_CLASS_TYPE(gobject_class),
-                     0,
-                     G_STRUCT_OFFSET(SpiceDisplayChannelClass,
-                                     streaming_mode),
+                     0, 0,
                      NULL, NULL,
                      g_cclosure_user_marshal_POINTER__BOOLEAN,
                      G_TYPE_POINTER,
diff --git a/src/channel-display.h b/src/channel-display.h
index 9c51aa2a..31293094 100644
--- a/src/channel-display.h
+++ b/src/channel-display.h
@@ -141,8 +141,6 @@ struct _SpiceDisplayChannelClass {
                                gint x, gint y, gint w, gint h);
     void (*display_mark)(SpiceChannel *channel,
                          gboolean mark);
-    void (*streaming_mode)(SpiceChannel *channel,
-                           gboolean streaming_mode);

     /*< private >*/
 };


Frediano


More information about the Spice-devel mailing list