1 ////////////////////////////////////////
3 ////////////////////////////////////////
4 #ifndef JRUGRX11TOOLS_H
5 #define JRUGRX11TOOLS_H
17 struct XkbOptionGroup
{
21 QList
<XkbOption
> options
;
28 //XkbOptionGroup* group;
33 QHash
<QString
, QString
> models
;
34 QHash
<QString
, QString
> layouts
;
35 QHash
<QString
, XkbOption
> options
;
36 QHash
<QString
, XkbOptionGroup
> optionGroups
;
49 LayoutUnit (const QString
&aLayout
, const QString
&aVariant
) : layout(aLayout
), variant(aVariant
) {}
50 LayoutUnit (const QString
&pair
) { setFromPair(pair
); }
52 inline void setDisplayName (const QString
&name
) { mDisplayName
= name
; }
53 inline QString
getDisplayName () const { return !mDisplayName
.isEmpty()?mDisplayName
:getDefaultDisplayName(layout
, variant
); }
55 inline void setFromPair (const QString
& pair
) { layout
= parseLayout(pair
); variant
= parseVariant(pair
); }
57 inline QString
toPair () const {
58 if (variant
.isEmpty()) return layout
;
59 return QString("%1(%2)").arg(layout
, variant
);
62 inline bool operator != (const LayoutUnit
&lu
) const { return layout
!=lu
.layout
|| variant
!=lu
.variant
; }
63 inline bool operator == (const LayoutUnit
&lu
) const { return layout
==lu
.layout
&& variant
==lu
.variant
; }
65 static inline QString
getDefaultDisplayName (const QString
&layout
, const QString
&variant
="") { Q_UNUSED(variant
); return layout
.left(3); }
67 static const QString
parseLayout (const QString
&layvar
);
68 static const QString
parseVariant (const QString
&layvar
);
79 typedef QList
<Window
> QX11WindowList
;
80 typedef QList
<Atom
> QX11AtomList
;
87 static const QString
findX11Dir ();
88 static const QString
findXkbRulesFile (const QString
&x11Dir
, Display
*dpy
);
89 static QList
<XkbVariant
> getVariants (const QString
&layout
, const QString
&x11Dir
);
90 static RulesInfo
*loadRules (const QString
&rulesFile
, bool layoutsOnly
=false);
91 //static JrugrCfg groupNames (Display *dpy);
93 static QString
atomName (Atom atom
);
95 static Window
activeWindow ();
96 static int activeDesktop ();
98 static void setActiveWindow (Window w
);
100 static Window
windowTransientFor (Window w
);
101 static int windowDesktop (Window w
); // -1: want to be 'sticky'
103 static QString
windowClass (Window w
);
104 static QString
windowName (Window w
);
105 static pid_t
windowPID (Window w
); // 0: unknown
107 static QX11WindowList
topLevelWindows ();
108 static QX11WindowList
topLevelWindowStack ();
110 static Window
appWindow (Window w
);
112 static QRect
trayPosition ();
114 static QX11AtomList
windowState (Window w
);
115 static QStringList
windowStateNames (Window w
);
118 static XkbOptionGroup
createMissingGroup (const QString
&groupName
);
119 static bool isGroupExclusive (const QString
&groupName
);