home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2007 September / PCWSEP07.iso / Software / Linux / Linux Mint 3.0 Light / LinuxMint-3.0-Light.iso / casper / filesystem.squashfs / usr / share / onboard / KbdWindow.py next >
Encoding:
Python Source  |  2007-02-20  |  3.6 KB  |  137 lines

  1. import gtk
  2. import gobject
  3.  
  4. class KbdWindow(gtk.Window):
  5.     """Very messy class holds the keyboard widget.  The mess is the docked window support which is disable because of numerous metacity bugs."""
  6.     def __init__(self,sok):#
  7.         gtk.Window.__init__(self)
  8.         self.keyboard = None
  9.         #self.add(self.keyboard)
  10.         self.sok = sok
  11.         self.connect("destroy", gtk.main_quit)
  12.         self.connect("size-request", self.cb_size_changed)
  13.                   self.set_accept_focus(False)
  14.                   self.grab_remove()
  15.                   self.set_keep_above(True)
  16.  
  17.         #self.set_default_size(self.get_screen().get_monitor_geometry(0).width,300)
  18.         x = self.sok.gconfClient.get_int("/apps/sok/sizeX")
  19.         y = self.sok.gconfClient.get_int("/apps/sok/sizeY")
  20.         
  21.         if x and y:
  22.             self.set_default_size(x,y)
  23.         else:
  24.             self.set_default_size(800,400)
  25.         #self.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)
  26.     
  27.     
  28.     def set_keyboard(self,keyboard):
  29.         if self.keyboard:
  30.             self.remove(self.keyboard)
  31.         self.keyboard = keyboard
  32.         self.add(self.keyboard)
  33.         self.keyboard.show()
  34.         self.queue_draw()
  35.  
  36.     def do_set_layout(self,client, cxion_id, entry, user_data):
  37.         return
  38.  
  39.     def do_set_size(self,client, cxion_id, entry, user_data): 
  40.     
  41.         self.set_default_size(self.sok.gconfClient.get_int("/apps/sok/sizeX"),
  42.                     self.sok.gconfClient.get_int("/apps/sok/sizeY"))
  43.  
  44.  
  45.     def cb_size_changed(self, widget, event):
  46.         size = self.get_allocation()
  47.         if size.width > 1 and size.height > 1:
  48.             self.sok.gconfClient.set_int("/apps/sok/sizeX", size.width)
  49.             self.sok.gconfClient.set_int("/apps/sok/sizeY", size.height)
  50.  
  51.     def do_set_gravity(self, edgeGravity):
  52.         
  53.  
  54.         self.edgeGravity = edgeGravity
  55.         width, height = self.get_size()
  56.         
  57.         
  58.         
  59.         
  60.  
  61.  
  62.  
  63.         '''This will place the window on the edge corresponding to the edge gravity'''
  64.             
  65.             geom = self.get_screen().get_monitor_geometry(0)
  66.             eg = self.edgeGravity
  67.                
  68.               x = 0
  69.             y = 0
  70.         if eg == gtk.gdk.GRAVITY_SOUTH:
  71.                 y = geom.height - height
  72.            
  73.             y += 29 #to account for panel. **TODO** Panel detection and avoidance.
  74.  
  75.         
  76.         self.move(x, y)
  77.  
  78.         
  79.  
  80.  
  81.         
  82.  
  83.         gobject.idle_add(self.do_set_strut)
  84.  
  85.  
  86.  
  87.     def do_set_strut(self):
  88.         propvals = [0,0,0,0,0,0,0,0,0,0,0,0]
  89.         """propvals = [0,#left 
  90.                    0, #right
  91.                    0, #top
  92.                 300,#bottom
  93.                 0,#left_start_y
  94.                 0,#left_end_y
  95.                 0,#right_start_y
  96.                 0,#right_end_y
  97.                 0,#top_start_x
  98.                 0,#top_end_x
  99.                 0,#bottom_start_x
  100.                 3000]#bottom_end_x"""
  101.         
  102.                 screen = self.get_screen()
  103.         biggestHeight = 0
  104.         for n in range(screen.get_n_monitors()):
  105.             tempHeight = screen.get_monitor_geometry(n).height
  106.             if biggestHeight < tempHeight:
  107.                 biggestHeight = tempHeight
  108.                 
  109.  
  110.  
  111.  
  112.         geom = self.get_screen().get_monitor_geometry(0)
  113.                 eg = self.edgeGravity
  114.                 x, y = self.window.get_origin()
  115.                 
  116.         width,height = self.get_size()
  117.                 
  118.                 if eg == gtk.gdk.GRAVITY_NORTH:
  119.                     propvals[2] = height + y
  120.             propvals[9] = width
  121.                 elif eg == gtk.gdk.GRAVITY_SOUTH and y != 0:
  122.                     #propvals[2] = y
  123.             #propvals[9] = geom.width - 1
  124.             print geom.height
  125.             propvals[3] = biggestHeight - y
  126.             propvals[11] = width - 1
  127.         
  128.         
  129.         print propvals
  130.                # tell window manager to not overlap buttons with maximized window
  131.                 self.window.property_change("_NET_WM_STRUT_PARTIAL",
  132.                                             "CARDINAL",
  133.                                             32,
  134.                                             gtk.gdk.PROP_MODE_REPLACE,
  135.                                             propvals)
  136.                self.queue_resize_no_redraw()
  137.