Question

J'ai un Python / application Linux qui affiche peu d'information I ont besoin dans une fenêtre GTK. Aux fins de cette discussion, il doit se comporter exactement comme un quai - existe sur tous les bureaux virtuels, et les fenêtres maximisées ne se chevauchent pas il.

Le premier point est assez facile, mais je l'ai passé des jours dénigrement ma tête contre mon moniteur en essayant d'obtenir le deuxième point - en évitant les duplications. Mon application ne doit pas être couvert si une autre fenêtre est agrandie. Réglage « toujours au-dessus » ne suffit pas, comme les autres fenêtres sont assis juste derrière ma barre d'information au lieu d'arrêter à son bord.

En bref: avec une fenêtre de style dock / panneau, comment pouvez-vous empêcher d'autres fenêtres de maximiser sur / en dessous?

Mise à jour: Problème résolu grâce à vsemenov

Était-ce utile?

La solution

_NET_WM_STRUT et _NET_WM_STRUT_PARTIAL (pour la rétrocompatibilité) à l'espace de réserve au bord de X Window desktop System.

Avec PyGtk vous pouvez définir ces propriétés comme si, en supposant self.window est une instance de gtk.Window:

self.window.get_toplevel().show() # must call show() before property_change()
self.window.get_toplevel().window.property_change("_NET_WM_STRUT", 
    "CARDINAL", 32, gtk.gdk.PROP_MODE_REPLACE, [0, 0, 0, bottom_width]) 

Clarification du paramètre de données dans [0, 0, 0, bottom_width] ci-dessus:

Ce paramètre spécifie la largeur de l'espace réservé à chaque frontière de l'écran de bureau dans l'ordre: [left, right, top, bottom]. Donc [0, 0, 0, 50] réserverait 50 pixels en bas de l'écran de bureau pour votre widget.

Voici un exemple de travail simple:

import gtk

class PyGtkWidgetDockExample:
    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.set_default_size(100, gtk.gdk.screen_height())
        self.window.move(gtk.gdk.screen_width()-100, 0)
        self.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DOCK)        
        self.window.show()          
        self.window.window.property_change("_NET_WM_STRUT", "CARDINAL", 32, 
            gtk.gdk.PROP_MODE_REPLACE, [0, 100, 0, 0])               

app = PyGtkWidgetDockExample()
gtk.main()
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top