Changeset 172
- Timestamp:
- 04/26/2005 10:28:02 AM (4 years ago)
- Location:
- trunk
- Files:
-
- 4 modified
-
NEWS (modified) (1 diff)
-
examples/petliwm.py (modified) (8 diffs)
-
plwm/wmanager.py (modified) (3 diffs)
-
plwm/wmevents.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/NEWS
r156 r172 1 1 -*-outline-*- 2 3 * Version ?.? (? ??? ????) 4 5 ** New synthetic events for iconification 6 7 When a client window is iconified or deiconified, the synthetic events 8 wmevents.ClientIconified and wmevents.ClientDeiconified is sent, 9 respectively. 10 2 11 3 12 * Version 2.6a (7 Apr 2004) -
trunk/examples/petliwm.py
r170 r172 1 1 #!/usr/bin/env python 2 # -*- coding: iso-8859-1 -*- 2 3 # 3 4 # petliwm.py -- My PLWM "configuration" … … 55 56 w, h = self.follow_size_hints(w, h) 56 57 self.configure(x = x, y = y, width = w, height = h) 58 59 60 class TraceIMClient: 61 62 """Trace IM clients which alter their window title when there's 63 new/unread messages. 64 65 Do this by reacting to WM_NAME and iconification changes, applying 66 a filter each time. 67 """ 68 69 # A list of tuples (filter_enable_tracing, filter_unseen_im, message) 70 71 traceim_clients = () 72 73 def __client_init__(self): 74 for enable, unseen, message in self.traceim_clients: 75 if enable(self): 76 self.traceim_unseen = unseen 77 self.traceim_message = message 78 self.dispatch.add_handler(X.PropertyNotify, self.traceim_handle_property) 79 self.dispatch.add_handler(wmevents.ClientIconified, self.traceim_handle_iconified) 80 self.dispatch.add_handler(wmevents.ClientDeiconified, self.traceim_handle_iconified) 81 break 82 83 84 def traceim_handle_property(self, evt): 85 if evt.atom == Xatom.WM_NAME: 86 self.traceim_update() 87 88 def traceim_handle_iconified(self, evt): 89 self.traceim_update() 90 91 def traceim_update(self): 92 if self.traceim_unseen(self): 93 self.wm.traceim_add_message(self.traceim_message) 94 else: 95 self.wm.traceim_remove_message(self.traceim_message) 57 96 97 98 class ModeWindowTraceIM: 99 mw_traceim_position = 0.1 100 mw_traceim_justification = modewindow.LEFT 101 102 def __wm_init__(self): 103 self.mw_traceim_messages = [] 104 self.mw_traceim_message = modewindow.Message(self.mw_traceim_position, 105 self.mw_traceim_justification) 106 for s in self.screens: 107 s.modewindow_add_message(self.mw_traceim_message) 108 109 def traceim_add_message(self, message): 110 if message not in self.mw_traceim_messages: 111 self.mw_traceim_messages.append(message) 112 self.mw_traceim_message.set_text(' '.join(self.mw_traceim_messages)) 113 114 def traceim_remove_message(self, message): 115 try: 116 self.mw_traceim_messages.remove(message) 117 except ValueError: 118 return 119 120 self.mw_traceim_message.set_text(' '.join(self.mw_traceim_messages)) 121 122 58 123 class MyClient(wmanager.Client, 59 124 outline.XorOutlineClient, … … 62 127 misc.InitialKeepOnScreenClient, 63 128 focus.JumpstartClient, 129 TraceIMClient, 64 130 ): 65 131 … … 73 139 border_color_name = "grey20" 74 140 border_focuscolor_name = "grey60" 141 142 traceim_clients = [ 143 (And(name('Emacs'), re_title('KOM')), # only KOM client Emacs 144 And(iconified, re_title('Olästa')), # only when iconified and unread 145 'Olästa') 146 ] 147 75 148 76 149 class MyScreen(wmanager.Screen, … … 88 161 def __wm_init__(self): 89 162 BasicKeys(self) 90 self.dispatch.add_handler('cmdevent', cmdhandler)91 163 92 164 … … 98 170 mw_acpi.ModeWindowACPI, 99 171 inspect.InspectServer, 172 ModeWindowTraceIM, 100 173 WMConfig): 101 174 … … 106 179 screen_class = MyScreen 107 180 108 def cmdhandler(evt):109 print 'Exit:', evt.exitstatus(), 'Signal:', evt.termsig()110 181 111 182 class BasicKeys(keys.KeyHandler): … … 210 281 211 282 def F3(self, evt): 212 self.wm.current_screen.view_find_with_client(Or(name('Mozilla'), 283 self.wm.current_screen.view_find_with_client(Or(name('Gecko'), 284 name('Mozilla'), 213 285 name('Netscape'), 214 286 name('Mozilla-bin'))) -
trunk/plwm/wmanager.py
r137 r172 1 # $Id: wmanager.py,v 1.2 5 2002-07-12 22:19:34petli Exp $1 # $Id: wmanager.py,v 1.26 2005-04-26 15:28:02 petli Exp $ 2 2 # 3 3 # wmanager.py -- core window manager functionality … … 561 561 self.mapped = 0 562 562 self.window.set_wm_state(state = Xutil.IconicState, icon = 0) 563 563 self.wm.events.put_event(wmevents.ClientIconified(self)) 564 564 565 565 def deiconify(self): … … 582 582 self.mapped = 1 583 583 self.window.set_wm_state(state = Xutil.NormalState, icon = 0) 584 self.wm.events.put_event(wmevents.ClientDeiconified(self)) 584 585 585 586 -
trunk/plwm/wmevents.py
r60 r172 1 # $Id: wmevents.py,v 1. 1 2001-12-06 11:08:09petli Exp $1 # $Id: wmevents.py,v 1.2 2005-04-26 15:28:02 petli Exp $ 2 2 # 3 3 # Internal events generated by the window manager core. … … 51 51 self.client = client 52 52 53 class ClientIconified: 54 def __init__(self, client): 55 self.type = ClientIconified 56 self.client = client 57 58 class ClientDeiconified: 59 def __init__(self, client): 60 self.type = ClientDeiconified 61 self.client = client 62 53 63 class CommandEvent: 54 64 def __init__(self, type):
