Code

Typo fix submitted by Yuro Chornoivan
[inkscape.git] / src / ui / uxmanager.cpp
1 /** \file
2  * Desktop widget implementation
3  */
4 /* Authors:
5  *   Jon A. Cruz <jon@joncruz.org>
6  *
7  * Copyright (C) 2010 Jon A. Cruz
8  *
9  * Released under GNU GPL, read the file 'COPYING' for more information
10  */
12 #ifdef HAVE_CONFIG_H
13 # include "config.h"
14 #endif
16 #include <algorithm>
18 #include "uxmanager.h"
19 #include "util/ege-tags.h"
20 #include "widgets/toolbox.h"
21 #include "widgets/desktop-widget.h"
22 #include "preferences.h"
24 #ifdef GDK_WINDOWING_X11
25 #include <gdk/gdkx.h>
26 #endif // GDK_WINDOWING_X11
28 using std::map;
29 using std::vector;
32 gchar const* KDE_WINDOW_MANAGER_NAME = "KWin";
33 gchar const* UNKOWN_WINDOW_MANAGER_NAME = "unknown";
36 static vector<SPDesktop*> desktops;
37 static vector<SPDesktopWidget*> dtws;
38 static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
42 namespace Inkscape {
43 namespace UI {
45 UXManager* instance = 0;
47 UXManager* UXManager::getInstance()
48 {
49     if (!instance) {
50         instance = new UXManager();
51     }
52     return instance;
53 }
56 UXManager::UXManager() :
57     floatwindowIssues(false)
58 {
59     ege::TagSet tags;
60     tags.setLang("en");
62     tags.addTag(ege::Tag("General"));
63     tags.addTag(ege::Tag("Icons"));
65 #if defined(GDK_WINDOWING_X11)
66     char const* wmName = gdk_x11_screen_get_window_manager_name( gdk_screen_get_default() );
67     //g_message("Window manager is [%s]", wmName);
69     //if (g_ascii_strcasecmp( wmName, UNKOWN_WINDOW_MANAGER_NAME ) == 0) {
70     if (g_ascii_strcasecmp( wmName, KDE_WINDOW_MANAGER_NAME ) == 0) {
71         floatwindowIssues = true;
72     }
73 #elif defined(GDK_WINDOWING_WIN32)
74     floatwindowIssues = true;
75 #endif // GDK_WINDOWING_WIN32
76 }
78 UXManager::~UXManager()
79 {
80 }
83 bool UXManager::isFloatWindowProblem() const
84 {
85     return floatwindowIssues;
86 }
88 void UXManager::setTask(SPDesktop* dt, gint val)
89 {
90     for (vector<SPDesktopWidget*>::iterator it = dtws.begin(); it != dtws.end(); ++it) {
91         SPDesktopWidget* dtw = *it;
93         gboolean notDone = Inkscape::Preferences::get()->getBool("/options/workarounds/dynamicnotdone", false);
95         if (dtw->desktop == dt) {
96             switch (val) {
97                 default:
98                 case 0:
99                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
100                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP);
101                     if (notDone) {
102                         dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP);
103                     }
104                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP);
105                     break;
106                 case 1:
107                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP);
108                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT);
109                     if (notDone) {
110                         dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP);
111                     }
112                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
113                     break;
114                 case 2:
115                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
116                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_RIGHT);
117                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
118                     if (notDone) {
119                         dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT);
120                     }
121             }
122         }
123     }
127 void UXManager::addTrack( SPDesktopWidget* dtw )
129     if (std::find(dtws.begin(), dtws.end(), dtw) == dtws.end()) {
130         dtws.push_back(dtw);
131     }
134 void UXManager::delTrack( SPDesktopWidget* dtw )
136     vector<SPDesktopWidget*>::iterator iter = std::find(dtws.begin(), dtws.end(), dtw);
137     if (iter != dtws.end()) {
138         dtws.erase(iter);
139     }
142 void UXManager::connectToDesktop( vector<GtkWidget *> const & toolboxes, SPDesktop *desktop )
144 //static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
146     for (vector<GtkWidget*>::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) {
147         GtkWidget* toolbox = *it;
149         ToolboxFactory::setToolboxDesktop( toolbox, desktop );
150         vector<GtkWidget*>& tracked = trackedBoxes[desktop];
151         if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) {
152             tracked.push_back(toolbox);
153         }
154     }
156     if (std::find(desktops.begin(), desktops.end(), desktop) == desktops.end()) {
157         desktops.push_back(desktop);
158     }
162 } // namespace UI
163 } // namespace Inkscape
165 /*
166   Local Variables:
167   mode:c++
168   c-file-style:"stroustrup"
169   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
170   indent-tabs-mode:nil
171   fill-column:99
172   End:
173 */
174 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :