GNOME Bugzilla – Bug 109654
Large desktop support
Last modified: 2004-12-22 21:47:04 UTC
Currently libwnck (and therefore the gnome-panel pager and window list) doesn't support large desktops, i.e. handling of the _NET_DESKTOP_GEOMETRY and _NET_DESKTOP_VIEWPORT hints. Recently, Extended Window Manager Hint support (i.e. potential GNOME2 compatibility) has been added to enlightenment, which does support large desktops. I really would like to see the GNOME desktop being able to work with enlightenment, so please consider these patches, which add support for large desktops to two libwnck versions: http://www.woelders.dk/~kw/stuff/gnome/libwnck-0.18-large-desktop-kw2.patch http://www.woelders.dk/~kw/stuff/gnome/libwnck-2.2.1-large-desktop-kw2.patch The patches are not perfect, but I think they do a fairly good job to begin with.
The patches look pretty close to right, thanks for doing this work. Here are some quick nitpicks: - be sure to put a space before parens "foo (" not "foo(" - should not name things wnck_viewport_get_x() but rather wnck_workspace_get_viewport_x() or something like that, if they are methods on the workspace - I wouldn't make wnck_screen_get_xyhint a public function, I'd keep it in xprops.h with an underscore prepended - the values in the properties need to be sanity-checked, in case someone decides it would be funny to specify a -50x-150 viewport or something - the viewport properties should be read in an idle handler when a PropertyNotify for them is received, like the other stuff in screen.c
OK, next version: http://www.woelders.dk/~kw/stuff/gnome/libwnck-2.2.1-large-desktop-kw3.patch Changes: - Style changes as requested. - Sanity checks on hint data. I assume that we only want to avoid applications to crash, not to attempt fixing general bad behavior. - A rewrite of the viewport hint handling. You asked me to "put the 2.2.1 one in bugzilla". Did you mean that I should include the patch as an attachment?
A link to the patch is fine, as long as you don't take it down before I apply it. ;-) I'm looking at merging the patch now, but you'll have to test the result since I don't have a WM that supports _NET_WM viewports.
Created attachment 15378 [details] [review] revised patch
Can you try this patch (and maybe debug it if it's hosed ;-) since I don't have a WM with viewports) A remaining issue is that if the WM changes the viewport geometry first and number of workspaces second, I think libwnck will get confused. So on changing number of workspaces probably we need to reload all viewport stuff. I'll make a little tweak for that but won't upload a new patch yet.
The extra bit I added in do_update_now(): /* if number of workspaces changes, we have to * update the per-workspace information as well * in case the WM changed the per-workspace info * first and number of spaces second. */ if (screen->priv->need_update_workspace_list) { screen->priv->need_update_viewport_settings = TRUE; screen->priv->need_update_workspace_names = TRUE; }
It looks as if the pager as well as the task list is broken. I will dig into it. A WM with large desktop support: E16 from CVS.
Created attachment 15416 [details] [review] Patch on revised patch
+ /* Yes, but space is the active one by the time the viewport hint + * hits the WM. It should be possible to change the desktop *and* + * the viewport in one mouse click. I don't think this can be implemented without fixing the EWMH, unfortunately. I don't understand the change to wnck_window_is_in_viewport() - isn't window->priv->x the actual server-side window position? I'm not looking at the code right this minute.
Collision - OK, I'll commit this message before reading yours anyway. I have been testing with patch above - things seem to work fine. You corrected the _NET_DESKTOP_VIEWPORT decoding according to the standard, and after doing that in E16 too things were fine with the pager. Changes: - pager.c: I think it should be possible to change the workspace *and* the viewport in one mouse click. Otherwise it doesn't "feel" right. - tasklist.c: Also needs the viewport change callback. - window.c: No need to make things more complicated than they are.
Oh, the window.c thing is just saying "since they have the same offset you can ignore the offset", I get it. This isn't actually needed to fix any bugs though, that's what I was confused about. Thanks, I'll get this in CVS later tonight.
Did it again... + I don't think this can be implemented without fixing the EWMH, + unfortunately. What do you mean - it works? wnck_window_is_in_viewport: This is just a question about a common origin - I think it is simplest to think of it in simple screen coordinates.
OK, in CVS now, should be working with all so-far-mentioned issues fixed. Thanks a lot for the patches, if there are any remaining details broken go ahead and file a new bug report for those.
Is there a chance of seeing a libwnck-2.3.1 release some time soon so that this feature starts rippling into the distributions?
The next stable release of libwnck (that distributions should ship) will be 2.4.0 - to come out with GNOME 2.4. http://www.gnome.org/start/2.3/ has the schedule.
I would be happy with an unstable libwnck-2.3.1 tarball going into unstable releases. From the release schedule it looks to me as if 2.3.1 tarballs are due May 5? Sorry to go on about this.