/** \file * Desktop widget implementation */ /* Authors: * Jon A. Cruz * * Copyright (C) 2010 Jon A. Cruz * * Released under GNU GPL, read the file 'COPYING' for more information */ #ifdef HAVE_CONFIG_H # include "config.h" #endif #include #include "uxmanager.h" #include "util/ege-tags.h" #include "widgets/toolbox.h" #include "widgets/desktop-widget.h" #include "preferences.h" #ifdef GDK_WINDOWING_X11 #include #endif // GDK_WINDOWING_X11 using std::map; using std::vector; gchar const* KDE_WINDOW_MANAGER_NAME = "KWin"; gchar const* UNKOWN_WINDOW_MANAGER_NAME = "unknown"; static vector desktops; static vector dtws; static map > trackedBoxes; namespace Inkscape { namespace UI { UXManager* instance = 0; UXManager* UXManager::getInstance() { if (!instance) { instance = new UXManager(); } return instance; } UXManager::UXManager() : floatwindowIssues(false) { ege::TagSet tags; tags.setLang("en"); tags.addTag(ege::Tag("General")); tags.addTag(ege::Tag("Icons")); #if defined(GDK_WINDOWING_X11) char const* wmName = gdk_x11_screen_get_window_manager_name( gdk_screen_get_default() ); //g_message("Window manager is [%s]", wmName); //if (g_ascii_strcasecmp( wmName, UNKOWN_WINDOW_MANAGER_NAME ) == 0) { if (g_ascii_strcasecmp( wmName, KDE_WINDOW_MANAGER_NAME ) == 0) { floatwindowIssues = true; } #elif defined(GDK_WINDOWING_WIN32) floatwindowIssues = true; #endif // GDK_WINDOWING_WIN32 } UXManager::~UXManager() { } bool UXManager::isFloatWindowProblem() const { return floatwindowIssues; } void UXManager::setTask(SPDesktop* dt, gint val) { for (vector::iterator it = dtws.begin(); it != dtws.end(); ++it) { SPDesktopWidget* dtw = *it; gboolean notDone = Inkscape::Preferences::get()->getBool("/options/workarounds/dynamicnotdone", false); if (dtw->desktop == dt) { switch (val) { default: case 0: dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT); dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP); if (notDone) { dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP); } dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP); break; case 1: dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP); dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT); if (notDone) { dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP); } dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT); break; case 2: dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT); dtw->setToolboxPosition("CommandsToolbar", GTK_POS_RIGHT); dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT); if (notDone) { dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT); } } } } } void UXManager::addTrack( SPDesktopWidget* dtw ) { if (std::find(dtws.begin(), dtws.end(), dtw) == dtws.end()) { dtws.push_back(dtw); } } void UXManager::delTrack( SPDesktopWidget* dtw ) { vector::iterator iter = std::find(dtws.begin(), dtws.end(), dtw); if (iter != dtws.end()) { dtws.erase(iter); } } void UXManager::connectToDesktop( vector const & toolboxes, SPDesktop *desktop ) { //static map > trackedBoxes; for (vector::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { GtkWidget* toolbox = *it; ToolboxFactory::setToolboxDesktop( toolbox, desktop ); vector& tracked = trackedBoxes[desktop]; if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) { tracked.push_back(toolbox); } } if (std::find(desktops.begin(), desktops.end(), desktop) == desktops.end()) { desktops.push_back(desktop); } } } // namespace UI } // namespace Inkscape /* Local Variables: mode:c++ c-file-style:"stroustrup" c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) indent-tabs-mode:nil fill-column:99 End: */ // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4 :