Code

Do not try to construct an ustring from NULL in CurveDragPoint::_getTip.
[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"
23 #ifdef GDK_WINDOWING_X11
24 #include <gdk/gdkx.h>
25 #endif // GDK_WINDOWING_X11
27 using std::map;
28 using std::vector;
31 gchar const* KDE_WINDOW_MANAGER_NAME = "KWin";
32 gchar const* UNKOWN_WINDOW_MANAGER_NAME = "unknown";
35 static vector<SPDesktop*> desktops;
36 static vector<SPDesktopWidget*> dtws;
37 static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
41 namespace Inkscape {
42 namespace UI {
44 UXManager* instance = 0;
46 UXManager* UXManager::getInstance()
47 {
48     if (!instance) {
49         instance = new UXManager();
50     }
51     return instance;
52 }
55 UXManager::UXManager() :
56     floatwindowIssues(false)
57 {
58     ege::TagSet tags;
59     tags.setLang("en");
61     tags.addTag(ege::Tag("General"));
62     tags.addTag(ege::Tag("Icons"));
64 #if defined(GDK_WINDOWING_X11)
65     char const* wmName = gdk_x11_screen_get_window_manager_name( gdk_screen_get_default() );
66     //g_message("Window manager is [%s]", wmName);
68     //if (g_ascii_strcasecmp( wmName, UNKOWN_WINDOW_MANAGER_NAME ) == 0) {
69     if (g_ascii_strcasecmp( wmName, KDE_WINDOW_MANAGER_NAME ) == 0) {
70         floatwindowIssues = true;
71     }
72 #elif defined(GDK_WINDOWING_WIN32)
73     floatwindowIssues = true;
74 #endif // GDK_WINDOWING_WIN32
75 }
77 UXManager::~UXManager()
78 {
79 }
82 bool UXManager::isFloatWindowProblem() const
83 {
84     return floatwindowIssues;
85 }
87 void UXManager::setTask(SPDesktop* dt, gint val)
88 {
89     for (vector<SPDesktopWidget*>::iterator it = dtws.begin(); it != dtws.end(); ++it) {
90         SPDesktopWidget* dtw = *it;
91         if (dtw->desktop == dt) {
92             switch (val) {
93                 default:
94                 case 0:
95                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
96                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP);
97                     //dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP);
98                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP);
99                     break;
100                 case 1:
101                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP);
102                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT);
103                     //dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP);
104                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
105                     break;
106                 case 2:
107                     dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT);
108                     dtw->setToolboxPosition("CommandsToolbar", GTK_POS_RIGHT);
109                     dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT);
110                     //dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT);
111             }
112         }
113     }
117 void UXManager::addTrack( SPDesktopWidget* dtw )
119     if (std::find(dtws.begin(), dtws.end(), dtw) == dtws.end()) {
120         dtws.push_back(dtw);
121     }
124 void UXManager::delTrack( SPDesktopWidget* dtw )
126     vector<SPDesktopWidget*>::iterator iter = std::find(dtws.begin(), dtws.end(), dtw);
127     if (iter != dtws.end()) {
128         dtws.erase(iter);
129     }
132 void UXManager::connectToDesktop( vector<GtkWidget *> const & toolboxes, SPDesktop *desktop )
134 //static map<SPDesktop*, vector<GtkWidget*> > trackedBoxes;
136     for (vector<GtkWidget*>::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) {
137         GtkWidget* toolbox = *it;
139         ToolboxFactory::setToolboxDesktop( toolbox, desktop );
140         vector<GtkWidget*>& tracked = trackedBoxes[desktop];
141         if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) {
142             tracked.push_back(toolbox);
143         }
144     }
146     if (std::find(desktops.begin(), desktops.end(), desktop) == desktops.end()) {
147         desktops.push_back(desktop);
148     }
152 } // namespace UI
153 } // namespace Inkscape
155 /*
156   Local Variables:
157   mode:c++
158   c-file-style:"stroustrup"
159   c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +))
160   indent-tabs-mode:nil
161   fill-column:99
162   End:
163 */
164 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :