fixed crash on layout adding when jrugr is running
[jrugr.git] / src / x11tools.h
blob7a60ae726c1306de4300c95bfc9f2145d7893d4b
1 ////////////////////////////////////////
2 // Copyright : GPL //
3 ////////////////////////////////////////
4 #ifndef JRUGRX11TOOLS_H
5 #define JRUGRX11TOOLS_H
7 #include "jrugrdefs.h"
9 #include <sys/types.h>
12 struct XkbOption;
13 struct XkbVariant;
14 struct LayoutUnit;
17 struct XkbOptionGroup {
18 QString name;
19 QString description;
20 bool exclusive;
21 QList<XkbOption> options;
25 struct XkbOption {
26 QString name;
27 QString description;
28 //XkbOptionGroup* group;
32 struct RulesInfo {
33 QHash<QString, QString> models;
34 QHash<QString, QString> layouts;
35 QHash<QString, XkbOption> options;
36 QHash<QString, XkbOptionGroup> optionGroups;
40 struct XkbVariant {
41 QString name;
42 QString description;
46 class LayoutUnit {
47 public:
48 LayoutUnit () {}
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);
70 public:
71 QString layout;
72 QString variant;
74 private:
75 QString mDisplayName;
79 typedef QList<Window> QX11WindowList;
80 typedef QList<Atom> QX11AtomList;
83 class X11Tools {
84 public:
85 X11Tools () {}
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);
117 private:
118 static XkbOptionGroup createMissingGroup (const QString &groupName);
119 static bool isGroupExclusive (const QString &groupName);
123 #endif