From 568dab6fba413360b1ca2cbf5205bdde8eb9a13b Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Thu, 7 Jan 2010 01:19:48 -0800 Subject: Added UXManager. Cleaning up toolbox creation. (bzr r8951) --- src/ui/uxmanager.cpp | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 src/ui/uxmanager.cpp (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp new file mode 100644 index 000000000..5f0021ef6 --- /dev/null +++ b/src/ui/uxmanager.cpp @@ -0,0 +1,68 @@ +/** \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 "uxmanager.h" +#include "util/ege-tags.h" +#include "widgets/toolbox.h" + +namespace Inkscape { +namespace UI { + +UXManager* instance = 0; + +UXManager* UXManager::getInstance() +{ + if (!instance) { + instance = new UXManager(); + } + return instance; +} + + +UXManager::UXManager() +{ + ege::TagSet tags; + tags.setLang("en"); + + tags.addTag(ege::Tag("General")); + tags.addTag(ege::Tag("Icons")); +} + +UXManager::~UXManager() +{ +} + + +void UXManager::connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) +{ + for (std::vector::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { + sp_toolbox_set_desktop( *it, 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 : -- cgit v1.2.3 From c4170261f04e1d37439f71c92fb3ac442da40c7f Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sat, 9 Jan 2010 01:37:23 -0800 Subject: Initial c++-ification of toolbox creation. (bzr r8955) --- src/ui/uxmanager.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 5f0021ef6..d152e473e 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -48,7 +48,7 @@ UXManager::~UXManager() void UXManager::connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) { for (std::vector::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { - sp_toolbox_set_desktop( *it, desktop ); + ToolboxFactory::setToolboxDesktop( *it, desktop ); } } -- cgit v1.2.3 From 7d549f19e53f6bb1b157f04a1cffb69d8f910ec5 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Sun, 10 Jan 2010 03:22:05 -0800 Subject: Completed base code to flip toolbox orientation. Basic integration of task switching control. (bzr r8963) --- src/ui/uxmanager.cpp | 62 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 59 insertions(+), 3 deletions(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index d152e473e..48ff9dca0 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -13,9 +13,21 @@ # include "config.h" #endif +#include + #include "uxmanager.h" #include "util/ege-tags.h" #include "widgets/toolbox.h" +#include "widgets/desktop-widget.h" + +using std::map; +using std::vector; + +static vector desktops; +static vector dtws; +static map > trackedBoxes; + + namespace Inkscape { namespace UI { @@ -44,11 +56,55 @@ UXManager::~UXManager() { } +void UXManager::setTask(SPDesktop* dt, gint val) +{ + GtkOrientation orientation = (val == 0)? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; + for (vector::iterator it = dtws.begin(); it != dtws.end(); ++it) { + if ((*it)->desktop == dt) { + vector& boxes = trackedBoxes[dt]; + for (vector::iterator it2 = boxes.begin(); it2 != boxes.end(); ++it2) { + gint id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(*it2), "BarIdValue")); + if (id != 1) { + //ToolboxFactory::setOrientation(*it2, orientation); + } + } + break; + } + } +} + -void UXManager::connectToDesktop( std::vector const & toolboxes, SPDesktop *desktop ) +void UXManager::addTrack( SPDesktopWidget* dtw ) { - for (std::vector::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { - ToolboxFactory::setToolboxDesktop( *it, desktop ); + 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); } } -- cgit v1.2.3 From 6b0bd0122093b8ea4a3a91bf25d1606ac429cb56 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 11 Jan 2010 01:09:52 -0800 Subject: Implemented dynamic repositioning of toolboxes. (bzr r8968) --- src/ui/uxmanager.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 48ff9dca0..2153606c1 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -58,15 +58,19 @@ UXManager::~UXManager() void UXManager::setTask(SPDesktop* dt, gint val) { - GtkOrientation orientation = (val == 0)? GTK_ORIENTATION_HORIZONTAL : GTK_ORIENTATION_VERTICAL; for (vector::iterator it = dtws.begin(); it != dtws.end(); ++it) { - if ((*it)->desktop == dt) { - vector& boxes = trackedBoxes[dt]; - for (vector::iterator it2 = boxes.begin(); it2 != boxes.end(); ++it2) { - gint id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(*it2), "BarIdValue")); - if (id != 1) { - //ToolboxFactory::setOrientation(*it2, orientation); - } + SPDesktopWidget* dtw = *it; + if (dtw->desktop == dt) { + if (val == 0) { + dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT); + dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP); + dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP); + // for now skip "AuxToolbar"; + } else { + dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP); + dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT); + dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT); + // for now skip "AuxToolbar"; } break; } @@ -95,8 +99,8 @@ void UXManager::connectToDesktop( vector const & toolboxes, SPDeskt for (vector::const_iterator it = toolboxes.begin(); it != toolboxes.end(); ++it ) { GtkWidget* toolbox = *it; - ToolboxFactory::setToolboxDesktop( toolbox, desktop ); + ToolboxFactory::setToolboxDesktop( toolbox, desktop ); vector& tracked = trackedBoxes[desktop]; if (find(tracked.begin(), tracked.end(), toolbox) == tracked.end()) { tracked.push_back(toolbox); -- cgit v1.2.3 From 36c2b2febc6c0c11991849232c907d5573600935 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 12 Jan 2010 01:59:58 -0800 Subject: Initial cut of disabling floating windows on window managers with problems. (bzr r8971) --- src/ui/uxmanager.cpp | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 2153606c1..ddc28a858 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -20,9 +20,18 @@ #include "widgets/toolbox.h" #include "widgets/desktop-widget.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; @@ -43,19 +52,38 @@ UXManager* UXManager::getInstance() } -UXManager::UXManager() +UXManager::UXManager() : + floatwindowIssues(false) { ege::TagSet tags; tags.setLang("en"); tags.addTag(ege::Tag("General")); tags.addTag(ege::Tag("Icons")); + +#ifdef 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 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) { -- cgit v1.2.3 From 8eb76a64895afea27e6975977437ab6be981bde5 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Tue, 12 Jan 2010 23:29:06 -0800 Subject: Adding a 'widescreen' task. (bzr r8972) --- src/ui/uxmanager.cpp | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index ddc28a858..d5fa90406 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -89,18 +89,26 @@ void UXManager::setTask(SPDesktop* dt, gint val) for (vector::iterator it = dtws.begin(); it != dtws.end(); ++it) { SPDesktopWidget* dtw = *it; if (dtw->desktop == dt) { - if (val == 0) { - dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT); - dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP); - dtw->setToolboxPosition("SnapToolbar", GTK_POS_TOP); - // for now skip "AuxToolbar"; - } else { - dtw->setToolboxPosition("ToolToolbar", GTK_POS_TOP); - dtw->setToolboxPosition("CommandsToolbar", GTK_POS_LEFT); - dtw->setToolboxPosition("SnapToolbar", GTK_POS_RIGHT); - // for now skip "AuxToolbar"; + switch (val) { + default: + case 0: + dtw->setToolboxPosition("ToolToolbar", GTK_POS_LEFT); + dtw->setToolboxPosition("CommandsToolbar", GTK_POS_TOP); + //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); + //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); + //dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT); } - break; } } } -- cgit v1.2.3 From 6fbee61b4dba00f152f120604461e40e9b929845 Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Fri, 15 Jan 2010 00:21:50 -0800 Subject: Fix for compile on windows. Fixes bug #506845. Fixed bugs: - https://launchpad.net/bugs/506845 (bzr r8986) --- src/ui/uxmanager.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index d5fa90406..7c080d3b8 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -61,7 +61,7 @@ UXManager::UXManager() : tags.addTag(ege::Tag("General")); tags.addTag(ege::Tag("Icons")); -#ifdef GDK_WINDOWING_X11 +#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); @@ -69,7 +69,7 @@ UXManager::UXManager() : if (g_ascii_strcasecmp( wmName, KDE_WINDOW_MANAGER_NAME ) == 0) { floatwindowIssues = true; } -#elif GDK_WINDOWING_WIN32 +#elif defined(GDK_WINDOWING_WIN32) floatwindowIssues = true; #endif // GDK_WINDOWING_WIN32 } -- cgit v1.2.3 From db9f79a6f3b5718ddf74753d8da78a9bc263e7fe Mon Sep 17 00:00:00 2001 From: "Jon A. Cruz" Date: Mon, 18 Jan 2010 15:11:50 +1300 Subject: Added temp option to enable repositioning of not-quite-completed UI items in relayout. (bzr r8997) --- src/ui/uxmanager.cpp | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'src/ui/uxmanager.cpp') diff --git a/src/ui/uxmanager.cpp b/src/ui/uxmanager.cpp index 7c080d3b8..3c6f85b91 100644 --- a/src/ui/uxmanager.cpp +++ b/src/ui/uxmanager.cpp @@ -19,6 +19,7 @@ #include "util/ege-tags.h" #include "widgets/toolbox.h" #include "widgets/desktop-widget.h" +#include "preferences.h" #ifdef GDK_WINDOWING_X11 #include @@ -88,26 +89,35 @@ 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); - //dtw->setToolboxPosition("AuxToolbar", 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); - //dtw->setToolboxPosition("AuxToolbar", GTK_POS_TOP); + 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); - //dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT); + if (notDone) { + dtw->setToolboxPosition("AuxToolbar", GTK_POS_RIGHT); + } } } } -- cgit v1.2.3