1- # $Id: drawable.py,v 1.4 2000-08 -22 13:53:02 petli Exp $
1+ # $Id: drawable.py,v 1.5 2000-09 -22 11:37:51 petli Exp $
22#
33# Xlib.xobject.drawable -- drawable objects (window and pixmap)
44#
1818# along with this program; if not, write to the Free Software
1919# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
2020
21- from Xlib import X
21+ import string
22+
23+ from Xlib import X , Xatom , Xutil
2224from Xlib .protocol import request
2325
2426# Other X resource objects
2729import cursor
2830import fontable
2931
32+ # Inter-client communication conventions
33+ import icccm
34+
3035class Drawable (resource .Resource ):
3136 __drawable__ = resource .Resource .__resource__
3237
@@ -43,7 +48,8 @@ def create_pixmap(self, width, height, depth):
4348 width = width ,
4449 height = height )
4550
46- return Pixmap (self .display , pid , owner = 1 )
51+ cls = self .display .get_resource_class ('pixmap' , Pixmap )
52+ return cls (self .display , pid , owner = 1 )
4753
4854 def create_gc (self , ** keys ):
4955 cid = self .display .allocate_resource_id ()
@@ -52,7 +58,8 @@ def create_gc(self, **keys):
5258 drawable = self .id ,
5359 attrs = keys )
5460
55- return fontable .GC (self .display , cid , owner = 1 )
61+ cls = self .display .get_resource_class ('gc' , fontable .GC )
62+ return cls (self .display , cid , owner = 1 )
5663
5764 def copy_area (self , gc , src_drawable , src_x , src_y , width , height , dst_x , dst_y , onerror = None ):
5865 request .CopyArea (display = self .display ,
@@ -257,7 +264,9 @@ def create_window(self, x, y, width, height, border_width, depth,
257264 window_class = window_class ,
258265 visual = visual ,
259266 attrs = keys )
260- return Window (self .display , wid , owner = 1 )
267+
268+ cls = self .display .get_resource_class ('window' , Window )
269+ return cls (self .display , wid , owner = 1 )
261270
262271 def change_attributes (self , onerror = None , ** keys ):
263272 request .ChangeWindowAttributes (display = self .display ,
@@ -531,7 +540,8 @@ def create_colormap(self, visual, alloc):
531540 mid = mid ,
532541 window = self .id ,
533542 visual = visual )
534- return colormap .Colormap (self .display , mid , owner = 1 )
543+ cls = self .display .get_resource_class ('colormap' , colormap .Colormap )
544+ return cls (self .display , mid , owner = 1 )
535545
536546 def list_installed_colormaps (self ):
537547 r = request .ListInstalledColormaps (display = self .display ,
@@ -545,6 +555,100 @@ def rotate_properties(self, properties, delta, onerror = None):
545555 delta = delta ,
546556 properties = properties )
547557
558+ def set_wm_name (self , name , onerror = None ):
559+ self .change_property (Xatom .WM_NAME , Xatom .STRING , 8 , name ,
560+ onerror = onerror )
561+
562+ def get_wm_name (self ):
563+ d = self .get_full_property (Xatom .WM_NAME , Xatom .STRING )
564+ if d is None or d .format != 8 :
565+ return None
566+ else :
567+ return d .value
568+
569+ def set_wm_icon_name (self , name , onerror = None ):
570+ self .change_property (Xatom .WM_ICON_NAME , Xatom .STRING , 8 , name ,
571+ onerror = onerror )
572+
573+ def get_wm_icon_name (self ):
574+ d = self .get_full_property (Xatom .WM_ICON_NAME , Xatom .STRING )
575+ if d is None or d .format != 8 :
576+ return None
577+ else :
578+ return d .value
579+
580+
581+ def set_wm_class (self , inst , cls , onerror = None ):
582+ self .change_property (Xatom .WM_CLASS , Xatom .STRING , 8 ,
583+ '%s\0 %s\0 ' % (inst , cls ),
584+ onerror = onerror )
585+
586+ def get_wm_class (self ):
587+ d = self .get_full_property (Xatom .WM_CLASS , Xatom .STRING )
588+ if d is None or d .format != 8 :
589+ return None
590+ else :
591+ parts = string .split (d .value , '\0 ' )
592+ if len (parts ) < 2 :
593+ return None
594+ else :
595+ return parts [0 ], parts [1 ]
596+
597+ def set_wm_transient_for (self , window , onerror = None ):
598+ self .change_property (Xatom .WM_TRANSIENT_FOR , Xatom .WINDOW ,
599+ 32 , window .id ,
600+ onerror = onerror )
601+
602+ def get_wm_transient_for (self ):
603+ d = self .get_property (Xatom .WM_TRANSIENT_FOR , Xatom .WINDOW , 0 , 1 )
604+ if d is None or d .format != 32 or len (d .value ) < 1 :
605+ return None
606+ else :
607+ cls = self .display .get_resource_class ('window' , Window )
608+ return cls (self .display , d .value [0 ])
609+
610+
611+ def set_wm_protocols (self , protocols , onerror = None ):
612+ self .change_property (self .display .get_atom ('WM_PROTOCOLS' ),
613+ Xatom .ATOM , 32 , protocols ,
614+ onerror = onerror )
615+
616+ def get_wm_protocols (self ):
617+ d = self .get_full_property (self .display .get_atom ('WM_PROTOCOLS' ), Xatom .ATOM )
618+ if d is None or d .format != 32 :
619+ return None
620+ else :
621+ return d .value
622+
623+ def set_wm_colormap_windows (self , windows , onerror = None ):
624+ self .change_property (self .display .get_atom ('WM_COLORMAP_WINDOWS' ),
625+ Xatom .WINDOW , 32 ,
626+ map (lambda w : w .id , windows ),
627+ onerror = onerror )
628+
629+ def get_wm_colormap_windows (self ):
630+ d = self .get_full_property (self .display .get_atom ('WM_COLORMAP_WINDOWS' ),
631+ Xatom .WINDOW )
632+ if d is None or d .format != 32 :
633+ return None
634+ else :
635+ cls = self .display .get_resource_class ('window' , Window )
636+ return map (lambda i , d = self .display , c = cls : c (d , i ),
637+ d .value )
638+
639+
640+ def set_wm_client_machine (self , name , onerror = None ):
641+ self .change_property (Xatom .WM_CLIENT_MACHINE , Xatom .STRING , 8 , name ,
642+ onerror = onerror )
643+
644+ def get_wm_client_machine (self ):
645+ d = self .get_full_property (Xatom .WM_CLIENT_MACHINE , Xatom .STRING )
646+ if d is None or d .format != 8 :
647+ return None
648+ else :
649+ return d .value
650+
651+
548652class Pixmap (Drawable ):
549653 __pixmap__ = resource .Resource .__resource__
550654
@@ -572,7 +676,8 @@ def create_cursor(self, mask,
572676 back_blue = back_blue ,
573677 x = x ,
574678 y = y )
575- return cursor .Cursor (self .display , cid , owner = 1 )
679+ cls = self .display .get_resource_class ('cursor' , cursor .Cursor )
680+ return cls (self .display , cid , owner = 1 )
576681
577682
578683
0 commit comments