I should have changed the subject earlier - my comment was not about the window closing, but about a generalization of Bibek's patch to simplify sugarization of regular X apps.
- Bert - On 04.03.2009, at 11:41, Tomeu Vizoso wrote: > Btw, at least in Sugar 0.84, this is already fixed. I can start from > terminal a normal X app and clicking on the Close option in the > palette will close it properly (should be the equivalent to clicking > the X button in most window decorations). > > HTH, > > Tomeu > > On Fri, Feb 27, 2009 at 11:45, Bert Freudenberg > <b...@freudenbergs.de> wrote: >> If generalized this is perhaps not so bad an idea for sugarizing >> regular X apps. The bundle's activity.info could declare a regexp to >> match the WM_NAME of a window and Sugar then could associate that >> activity with the window (associating a window with an activity >> instance is the whole purpose of the SUGAR_* WM properties). As long >> as this also restricts the number of simultaneously running instances >> to 1 it should work (because you could not distinguish two different >> instances). >> >> This would make the libsugarize hack unnecessary. I like it >> already :) >> >> - Bert - >> >> On 27.02.2009, at 10:07, Bibek Kafle wrote: >> >>> Hi, >>> >>> The problem we talked about is mostly fixed now. John Maloney said >>> that Scratch is going to handle being closed from the frame from the >>> next release. Opening firefox opened two icons on the frame: the >>> firefox icon and another black circle. There was a bug filed >>> somewhere that said that that was because some X properties were not >>> set before the window opened. There was something about how to solve >>> this from the activity itself, but I couldn't understand most of it >>> so I added the following fucntion to /usr/share/sugar/shell/model/ >>> homemodel.py and then called it from HomeModel._window_opened_cb() >>> (eg. _fix_icons('org.laptop.FirefoxActivity', 'Mozilla Firefox', >>> self._activities, window) doing this made the black little circle go >>> away, and now closing the firefox icon from the frame works. But I'm >>> not sure if this is the best solution. >>> >>> Thanks >>> Bibek >>> >>> def _fix_icons(reg_exp, wm_name, activities, wnck_window): >>> # reg_exp is the regular expression to match the service name >>> # wm_name is the value of the WM_NAME property of the X window >>> # activities is the collection of the HomeActivity instances >>> # wnck_window is the new X window >>> >>> window = gtk.gdk.window_foreign_new(wnck_window.get_xid()) >>> >>> # Check if the new window is window with wm_name >>> if window.property_get('WM_NAME' , 'STRING')[2] == wm_name: >>> >>> for i in activities: >>> >>> # find the HomeActivity instance with service name >>> matching reg_exp >>> >>> if i.get_window() is not None: >>> >>> if re.match(reg_exp, str(i.get_type())) != None: >>> >>> if str(_get_sugar_window_type(i.get_window())) >>> == 'launcher': >>> >>> # Set sugar specific X properties >>> >>> window.property_change('_SUGAR_BUNDLE_ID', >>> 'STRING', 8, gtk.gdk.PROPERTY_NEW_VALUE, str(i.get_type)) >>> window.property_change('_SUGAR_ACTIVITY_ID', >>> 'STRING', 8, gtk.gdk.PROPERTY_NEW_VALUE, str(i.get_activity_id())) >>> window.property_change('_NET_WM_NAME', >>> 'STRING', 8, gtk.gdk.PROPERTY_NEW_VALUE, str(i.get_title)) >>> window.property_change('_NET_WM_PID', >>> 'STRING', 8, gtk.gdk.PROPERTY_NEW_VALUE, str(i.get_pid)) >>> window.property_change('_SUGAR_WINDOW_TYPE', >>> 'STRING', 8, gtk.gdk.PROPERTY_NEW_VALUE, 'Firefox') >>> >>> >>> >>> >>> >>> ---------- Forwarded message ---------- >>> From: Bernie Innocenti <ber...@codewiz.org> >>> Date: Wed, Feb 25, 2009 at 3:33 AM >>> Subject: Re: Making activities close from the sugar frame >>> To: Bibek Kafle <bibek.ka...@olenepal.org> >>> >>> >>> Any particular reason why this is off-list? Can we forward it to >>> sugar-devel@ so the other developers can see what we're up to? >>> >>> Bibek Kafle wrote: >>>> Hi, >>>> To make firefox and scratch close from the sugar frame I tried to >>> change >>>> a method in the CurrentActivityPallete class in >>>> /usr/sugar/sugar/shell/view/palletes.py to send SIGKILL signal to >>> the >>>> activity after getting the pid from the HomeActivity object, but it >>>> didn't work. The shell log said that the operation was not >>> permitted. >>> >>> It's Rainbow's fault! Activities run with a different UID for >>> isolation. >>> >>> >>>> Then I tried to use a c wrapper to make to set setuid for a python >>>> script that killed the pid, but it still said that the operation >>> was not >>>> permitted. Even if that worked, Bryan says that simply killing the >>>> process will be dirty because firefox will say that the previous >>> session >>>> was closed unexpectedly the next time it is run. I'm out of ideas >>> now! >>> >>> Indeed, this is not how gnome and kde close applications. >>> >>>> Bryan said that you had an idea about how I can go about making >>> scratch >>>> and firefox close from the sugar frame. He said something about >>> making a >>>> wrapper that handles X11 close events. How do I do that? >>>> Bibek >>> >>> If you find the XID for the window somwewhere in the activity info >>> managed by Sugar, you can send it a window close event. >>> >>> I'm not sure about the details, but: >>> >>> - see "man XSendEvent" >>> >>> - it seems you have to send an event called ClientMessage >>> >>> http://tronche.com/gui/x/xlib/events/client-communication/client-message.html >>> >>> - The ancient ICCCM specification tells what needs to be done >>> http://tronche.com/gui/x/icccm/sec-4.html#s-4.2.8.1 >>> >>> I would just grab some example code (for example a window manager) >>> instead >>> of reading through the specs >>> >>> -- >>> // Bernie Innocenti - http://www.codewiz.org/ >>> \X/ Sugar Labs - http://www.sugarlabs.org/ >>> >>> _______________________________________________ >>> Sugar-devel mailing list >>> Sugar-devel@lists.sugarlabs.org >>> http://lists.sugarlabs.org/listinfo/sugar-devel >> >> >> >> _______________________________________________ >> Sugar-devel mailing list >> Sugar-devel@lists.sugarlabs.org >> http://lists.sugarlabs.org/listinfo/sugar-devel >> _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel