Advertisement
Guest User

pyQt5Test

a guest
Jun 9th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.24 KB | None | 0 0
  1. import sys, os, subprocess
  2. from PyQt5 import QtCore
  3. from PyQt5.QtCore import Qt
  4. from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton
  5. from Xlib import display, X, Xatom, Xutil
  6. import Xlib.protocol.event
  7.            
  8. atoms = {
  9.     'type_desktop' : '_NET_WM_WINDOW_TYPE_DESKTOP',
  10.     'type_dock'    : '_NET_WM_WINDOW_TYPE_DOCK',    
  11.     'win_type'     : '_NET_WM_WINDOW_TYPE',
  12.     'state_below'  : '_NET_WM_STATE_BELOW',
  13.     'wm_state'     : '_NET_WM_STATE',    
  14.     'wm_check'     : '_NET_SUPPORTING_WM_CHECK',
  15.     'wm_name'      : '_NET_WM_NAME'
  16. }
  17.  
  18. class AppMainWindow(QMainWindow):
  19.     def __init__(self):
  20.         super(AppMainWindow, self).__init__()
  21.         self.display = display.Display()
  22.         self.screen  = self.display.screen()
  23.         self.root    = self.screen.root
  24.  
  25.         self.isWM = self.wmName() not in ['marco',            #Mate
  26.                                           'kwin',             #KDE
  27.                                           'xfwm4',            #Xfce
  28.                                           'metacity',         #Gnome2
  29.                                           'mutter',           #GnomeShell
  30.                                           'compiz',           #Compiz
  31.                                           'mutter (muffin)']  #Cinnamon                                          
  32.         self.win = self.display.create_resource_object("window", int(self.winId()))
  33.         self.setProp()
  34.        
  35.     def setProp(self):
  36.         winType = self.atom('type_desktop') if self.isWM else self.atom('type_dock')
  37.         self.win.change_property(self.atom('win_type'), Xatom.ATOM, 32, [winType])
  38.         self.display.flush()
  39.  
  40.     def setBelow(self):
  41.         if self.isWM:
  42.             return 0
  43.         data = [1, self.atom('state_below')]
  44.         self.sendEvent(self.win, self.atom('wm_state'), data)
  45.         self.display.flush()
  46.  
  47.     def sendEvent(self, win, ctype, data, mask=None):
  48.         data = (data+[0]*(5-len(data)))[:5]
  49.         ev = Xlib.protocol.event.ClientMessage(window=win, client_type=ctype, data=(32,(data)))
  50.         if not mask:
  51.             mask = (X.SubstructureRedirectMask | X.SubstructureNotifyMask)
  52.         self.root.send_event(ev, event_mask=mask)
  53.  
  54.     def atom(self, name):
  55.         return self.display.intern_atom(atoms.get(name, name))
  56.        
  57.     def wmName(self):
  58.         name = ''
  59.         win_id = self.root.get_full_property(self.atom('wm_check'), 0)
  60.         if win_id:
  61.             w = self.display.create_resource_object("window", win_id.value[0])                        
  62.             prop = w.get_full_property(self.atom('wm_name'), 0)
  63.             if prop:
  64.                 name = prop.value
  65.         return name.lower()
  66.  
  67.     def setClassName(self, name, className):
  68.         self.win.set_wm_class(name, className)                        
  69.    
  70. def main():    
  71.     window = AppMainWindow()
  72.     window.setClassName('qt5Test.py', 'qt5Test')
  73.    
  74.     Button = QPushButton('Close', window)
  75.     Button.clicked.connect(QtCore.QCoreApplication.instance().quit)
  76.     Button.move(50, 50)
  77.  
  78.     window.setGeometry(150, 150, 200, 200)
  79.  
  80.     window.show()
  81.     window.setBelow()
  82.  
  83.     sys.exit(app.exec_())
  84.  
  85. if __name__ == '__main__':
  86.     app = QApplication(sys.argv)
  87.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement