Code

first crack at enabling blend for layers dialog
[inkscape.git] / src / ui / widget / dock.cpp
index f282449dd0994bda824c573b3e4363e953c69630..563ed8e981bc21db4460e93c56a68b403c82b1da 100644 (file)
@@ -23,7 +23,7 @@ namespace Widget {
 
 namespace {
 
-void hideCallback(GtkObject *object, gpointer dock_ptr)
+void hideCallback(GtkObject */*object*/, gpointer dock_ptr)
 {
     g_return_if_fail( dock_ptr != NULL );
 
@@ -31,7 +31,7 @@ void hideCallback(GtkObject *object, gpointer dock_ptr)
     dock->hide();
 }
 
-void unhideCallback(GtkObject *object, gpointer dock_ptr)
+void unhideCallback(GtkObject */*object*/, gpointer dock_ptr)
 {
     g_return_if_fail( dock_ptr != NULL );
 
@@ -74,16 +74,17 @@ Dock::Dock(Gtk::Orientation orientation)
 
     _scrolled_window->set_size_request(0);
 
-    GdlSwitcherStyle gdl_switcher_style = 
-        static_cast<GdlSwitcherStyle>(prefs_get_int_attribute_limited("options.dock", "switcherstyle", 
+    GdlSwitcherStyle gdl_switcher_style =
+        static_cast<GdlSwitcherStyle>(prefs_get_int_attribute_limited("options.dock", "switcherstyle",
                                                                       GDL_SWITCHER_STYLE_BOTH, 0, 4));
 
     g_object_set (GDL_DOCK_OBJECT(_gdl_dock)->master,
                   "switcher-style", gdl_switcher_style,
+                  "expand-direction", GDL_DOCK_EXPANSION_DIRECTION_DOWN,
                   NULL);
 
-    GdlDockBarStyle gdl_dock_bar_style = 
-        static_cast<GdlDockBarStyle>(prefs_get_int_attribute_limited("options.dock", "dockbarstyle", 
+    GdlDockBarStyle gdl_dock_bar_style =
+        static_cast<GdlDockBarStyle>(prefs_get_int_attribute_limited("options.dock", "dockbarstyle",
                                                                      GDL_DOCK_BAR_BOTH, 0, 3));
 
     gdl_dock_bar_set_style(_gdl_dock_bar, gdl_dock_bar_style);
@@ -91,8 +92,11 @@ Dock::Dock(Gtk::Orientation orientation)
     g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_hide", G_CALLBACK(hideCallback), (void *)this);
     g_signal_connect(G_OBJECT(INKSCAPE), "dialogs_unhide", G_CALLBACK(unhideCallback), (void *)this);
 
+    g_signal_connect(_paned->gobj(), "button-press-event", G_CALLBACK(_on_paned_button_event), (void *)this);
+    g_signal_connect(_paned->gobj(), "button-release-event", G_CALLBACK(_on_paned_button_event), (void *)this);
+
     signal_layout_changed().connect(sigc::mem_fun(*this, &Inkscape::UI::Widget::Dock::_onLayoutChanged));
-}    
+}
 
 Dock::~Dock()
 {
@@ -108,8 +112,9 @@ Dock::addItem(DockItem& item, DockItem::Placement placement)
 
     // FIXME: This is a hack to prevent the dock from expanding the main window, this can't be done
     // initially as the paned doesn't exist.
-    if (Gtk::Paned *paned = getParentPaned())
-       paned->set_resize_mode(Gtk::RESIZE_QUEUE);
+    if (Gtk::Paned *paned = getParentPaned()) {
+        paned->set_resize_mode(Gtk::RESIZE_QUEUE);
+    }
 }
 
 Gtk::Widget&
@@ -133,17 +138,24 @@ Dock::getPaned()
     return _paned;
 }
 
+GtkWidget *
+Dock::getGdlWidget()
+{
+    return GTK_WIDGET(_gdl_dock);
+}
 
 bool
 Dock::isEmpty() const
 {
     std::list<const DockItem *>::const_iterator
-       i = _dock_items.begin(),
-       e = _dock_items.end();
+        i = _dock_items.begin(),
+        e = _dock_items.end();
 
-    for (; i != e; ++i)
-       if ((*i)->getState() == DockItem::DOCKED_STATE)
-           return false;
+    for (; i != e; ++i) {
+        if ((*i)->getState() == DockItem::DOCKED_STATE) {
+            return false;
+        }
+    }
 
     return true;
 }
@@ -152,13 +164,15 @@ bool
 Dock::hasIconifiedItems() const
 {
     std::list<const DockItem *>::const_iterator
-       i = _dock_items.begin(),
-       e = _dock_items.end();
+        i = _dock_items.begin(),
+        e = _dock_items.end();
+
+    for (; i != e; ++i) {
+        if ((*i)->isIconified()) {
+            return true;
+        }
+    }
 
-    for (; i != e; ++i)
-       if ((*i)->isIconified())
-           return true;
-    
     return false;
 }
 
@@ -168,7 +182,7 @@ Dock::hide()
     getWidget().hide();
 }
 
-void 
+void
 Dock::show()
 {
     getWidget().show();
@@ -182,18 +196,18 @@ Dock::toggleDockable(int width, int height)
     Gtk::Paned *parent_paned = getParentPaned();
 
     if (width > 0 && height > 0) {
-       prev_horizontal_position = parent_paned->get_position();
-       prev_vertical_position = _paned->get_position();
+        prev_horizontal_position = parent_paned->get_position();
+        prev_vertical_position = _paned->get_position();
 
-       if (getWidget().get_width() < width)
-           parent_paned->set_position(parent_paned->get_width() - width);
-       
-       if (_paned->get_position() < height)
-           _paned->set_position(height);
+        if (getWidget().get_width() < width)
+            parent_paned->set_position(parent_paned->get_width() - width);
+
+        if (_paned->get_position() < height)
+            _paned->set_position(height);
 
     } else {
-       parent_paned->set_position(prev_horizontal_position);
-       _paned->set_position(prev_vertical_position);
+        parent_paned->set_position(prev_horizontal_position);
+        _paned->set_position(prev_vertical_position);
     }
 
 }
@@ -217,7 +231,7 @@ Dock::scrollToItem(DockItem& item)
 Glib::SignalProxy0<void>
 Dock::signal_layout_changed()
 {
-    return Glib::SignalProxy0<void>(Glib::wrap(GTK_WIDGET(_gdl_dock)), 
+    return Glib::SignalProxy0<void>(Glib::wrap(GTK_WIDGET(_gdl_dock)),
                                     &_signal_layout_changed_proxy);
 }
 
@@ -225,21 +239,39 @@ void
 Dock::_onLayoutChanged()
 {
     if (isEmpty()) {
-
-       if (hasIconifiedItems())
-           _scrolled_window->set_size_request(_default_dock_bar_width);
-       else
-           _scrolled_window->set_size_request(_default_empty_width);
+        if (hasIconifiedItems()) {
+            _scrolled_window->set_size_request(_default_dock_bar_width);
+        } else {
+            _scrolled_window->set_size_request(_default_empty_width);
+        }
 
         getParentPaned()->set_position(INT_MAX);
     } else {
-       _scrolled_window->set_size_request(-1);
+        // unset any forced size requests
+        _paned->get_child1()->set_size_request(-1, -1);
+        _scrolled_window->set_size_request(-1);
     }
 }
 
+void
+Dock::_onPanedButtonEvent(GdkEventButton *event)
+{
+    if (event->button == 1 && event->type == GDK_BUTTON_PRESS)
+        /* unset size request when starting a drag */
+        _paned->get_child1()->set_size_request(-1, -1);
+}
+
+gboolean
+Dock::_on_paned_button_event(GtkWidget */*widget*/, GdkEventButton *event, gpointer user_data)
+{
+    if (Dock *dock = static_cast<Dock *>(user_data))
+        dock->_onPanedButtonEvent(event);
+
+    return FALSE;
+}
 
 const Glib::SignalProxyInfo
-Dock::_signal_layout_changed_proxy = 
+Dock::_signal_layout_changed_proxy =
 {
     "layout-changed",
     (GCallback) &Glib::SignalProxyNormal::slot0_void_callback,
@@ -261,4 +293,4 @@ Dock::_signal_layout_changed_proxy =
   fill-column:99
   End:
 */
-// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99 
+// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99