GNOME Bugzilla – Bug 612490
Does not compile with -DGSEAL_ENABLED
Last modified: 2011-01-31 11:24:23 UTC
This module does not build with -DGSEAL_ENABLED. See http://live.gnome.org/GnomeGoals/UseGseal . Note that maybe this report cannot be fixed yet, as GTK+ still misses some accessor functions (see bug 588389, bug 597610) needed for sealing. Also see http://live.gnome.org/GTK%2B/3.0/PendingSealings for current status. The jhbuild output posted here of course only lists the very first error when trying to compile. pager.c: In function ‘wnck_pager_init’: pager.c:236: error: ‘GtkObject’ has no member named ‘flags’ pager.c: In function ‘wnck_pager_realize’: pager.c:338: error: ‘GtkObject’ has no member named ‘flags’ pager.c:341: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:342: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:343: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:344: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:355: error: ‘GtkWidget’ has no member named ‘window’ pager.c:356: error: ‘GtkWidget’ has no member named ‘window’ pager.c:358: error: ‘GtkWidget’ has no member named ‘style’ pager.c:358: error: ‘GtkWidget’ has no member named ‘style’ pager.c:358: error: ‘GtkWidget’ has no member named ‘window’ pager.c:359: error: ‘GtkWidget’ has no member named ‘style’ pager.c:359: error: ‘GtkWidget’ has no member named ‘window’ pager.c: In function ‘wnck_pager_size_request’: pager.c:506: error: ‘GtkWidget’ has no member named ‘style’ pager.c:507: error: ‘GtkWidget’ has no member named ‘style’ pager.c: In function ‘wnck_pager_size_allocate’: pager.c:539: error: ‘GtkWidget’ has no member named ‘style’ pager.c:540: error: ‘GtkWidget’ has no member named ‘style’ pager.c: In function ‘get_workspace_rect’: pager.c:599: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:600: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:604: error: ‘GtkWidget’ has no member named ‘style’ pager.c:605: error: ‘GtkWidget’ has no member named ‘style’ pager.c:606: error: ‘GtkWidget’ has no member named ‘style’ pager.c:607: error: ‘GtkWidget’ has no member named ‘style’ pager.c:621: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:622: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:626: error: ‘GtkWidget’ has no member named ‘style’ pager.c:627: error: ‘GtkWidget’ has no member named ‘style’ pager.c:681: error: ‘GtkWidget’ has no member named ‘style’ pager.c:682: error: ‘GtkWidget’ has no member named ‘style’ pager.c: In function ‘draw_window’: pager.c:800: error: ‘GtkWidget’ has no member named ‘style’ pager.c:802: error: ‘GtkWidget’ has no member named ‘style’ pager.c:857: error: ‘GtkWidget’ has no member named ‘style’ pager.c:859: error: ‘GtkWidget’ has no member named ‘style’ pager.c: In function ‘workspace_at_point’: pager.c:935: error: ‘GtkWidget’ has no member named ‘style’ pager.c:936: error: ‘GtkWidget’ has no member named ‘style’ pager.c:971: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:979: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c: In function ‘wnck_pager_draw_workspace’: pager.c:1048: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1049: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1061: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1065: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1134: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1137: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1149: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1163: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1187: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1213: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1215: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1216: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1228: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1228: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1233: error: ‘GtkWidget’ has no member named ‘window’ pager.c: In function ‘wnck_pager_expose_event’: pager.c:1268: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1269: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1270: error: ‘GtkWidget’ has no member named ‘state’ pager.c:1275: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:1276: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:1280: error: ‘GtkWidget’ has no member named ‘style’ pager.c:1281: error: ‘GtkWidget’ has no member named ‘window’ pager.c:1282: error: ‘GtkWidget’ has no member named ‘state’ pager.c:1289: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c:1290: error: ‘GtkWidget’ has no member named ‘allocation’ pager.c: In function ‘wnck_pager_drag_data_received’: pager.c:1522: error: ‘GtkSelectionData’ has no member named ‘length’ pager.c:1523: error: ‘GtkSelectionData’ has no member named ‘format’ pager.c:1537: error: ‘GtkSelectionData’ has no member named ‘data’ pager.c: In function ‘wnck_pager_drag_data_get’: pager.c:1570: error: ‘GtkSelectionData’ has no member named ‘target’ pager.c: In function ‘wnck_update_drag_icon’: pager.c:1649: error: ‘GtkWidget’ has no member named ‘window’ pager.c: In function ‘wnck_pager_motion’: pager.c:1750: error: ‘GtkWidget’ has no member named ‘window’ make[2]: *** [pager.lo] Error 1 make[2]: Leaving directory `/home/andre/svn-gnome/libwnck/libwnck' make[1]: *** [all-recursive] Error 1
Committed a few fixes, only problem left now are two cases where we'd need gtk_accessible_set_widget() which does not exist.
(In reply to comment #1) > Committed a few fixes, only problem left now are two cases where we'd need > gtk_accessible_set_widget() which does not exist. The fix you committed to libwnck/tasklist.c is wrong, see the comment above your change. Can you revert it?
Bah, reading. :-) Done, thanks for noticing.
Work left to do: make[2]: Entering directory `/libwnck/libwnck' pager.c: In function ‘wnck_pager_drag_motion’: pager.c:1505: error: ‘GdkDragContext’ has no member named ‘suggested_action’ tasklist.c: In function ‘wnck_task_drag_motion’: tasklist.c:3572: error: ‘GdkDragContext’ has no member named ‘suggested_action’ tasklist.c: In function ‘fake_expose_widget’: tasklist.c:3979: error: ‘GtkWidget’ has no member named ‘window’ xutils.c: In function ‘get_cmap’: xutils.c:1620: error: ‘GdkVisual’ has no member named ‘depth’ pager-accessible.c: In function ‘wnck_pager_accessible_new’: pager-accessible.c:296: error: ‘GtkAccessible’ has no member named ‘widget’ pager-accessible.c: In function ‘wnck_pager_accessible_get_n_children’: pager-accessible.c:367: error: ‘GtkAccessible’ has no member named ‘widget’
Only two issues left. One might be because of a missing gtk_accessible_set_widget() (not sure it's the right thing to do) and the other one is what I made you revert -- no idea how to fix this one.
We need a internal _gtk_accessible_set_widget() function in GTK+3, so maybe makes sense make it public. Could you file a bug against GTK+ about this?
The bug for gtk_accessible_set_widget() is bug #622371.
I pushed the fix for gtk_accessible_set_widget(), which is now in GTK+ 2.22.0. The FIXME to which Vincent refers in comment #5 is in tasklist.c:fake_expose_widget(). This function is used to draw the tasklist button's label and image to a pixmap, to later fade that pixmap in and out. This seems like a lot of voodoo just to draw the "attention" animation. We could very well do this: * Add knowledge to the tasklist's buttons to draw themselves in any particular state. * Use gtk_widget_get_snapshot() to screenshot the start/end states. * Fade between the resulting pixmaps as usual. Or we could just have the button re-expose itself at each frame of the animation and remove the need for screenshotting.
The only issue left is: tasklist.c: In function ‘fake_expose_widget’: tasklist.c:3984:9: error: ‘GtkWidget’ has no member named ‘window’ with this code: /* FIXME GSeal: we should use this: gtk_widget_set_window (widget, pixmap); but pixmap is not a GdkWindow... */ widget->window = pixmap; No idea how to fix it.
(of course, I put my comment without reading federico's comment since we had a conflict ;-))
I've looked at it and it seems to be a clear case of doing it wrong. I think a proper solution does not involve trying to take screenshots to pixmaps and trying to fiddle with them somehow.
Ok, I decided I'm not going to fix it. It's completely broken design-wise. From my POV this code should be compiled with -DGSEAL_ENABLE and someone needs to come up with a rework for GTK3. If we get gtk_widget_draw(), this will be reasonably easy, but until then, you get to keep the pieces of this breakage. (Note that if you want to workaround this today, you could either use gtk_widget_get_snapshot() or try creating an offscreen window instad of a pixmap. I'd still consider the solutions broken.) A proper solution would be a function like gtk_button_set_urgency_hint(). That would be a very useful feature, because not just libwnck uses this glow mechanism, but I've spottet it at least in totem, too.
Fixed in master.