[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-core-devel
Subject:    [Patch] Re: KDockWidget'S
From:       Andreas Zehender <zehender () kde ! org>
Date:       2002-09-10 17:38:05
[Download RAW message or body]

Hi!
On Tuesday 10 September 2002 19:12, Lubos Lunak wrote:
>  I guess we need a new rule in the keep-BC paper, saying that classes
> willing to stay BC shouldn't have inline destructor.
>
>  You can destroy the private data by inheriting class
> KDockWidgetHeader::KDockWidgetHeaderPrivate from QObject and passing the
> KDockWidgetHeader instance that created it as its parent (so it will delete
> it automatically). *shrug*
>
>  BTW, if you want, you can just use KDockWidgetHeaderPrivate instead of
> KDockWidgetHeader::KDockWidgetHeaderPrivate , if you move the forward
> declaration out of the class (lazy people ... including me :-/  ). It won't
> break BC, the 'd' member is just a pointer.

This new patch fixes the inline constructor issue and should be now fully 
binary conpatible.

Can I commit?

-- 
--------------------------------------------------
 Andreas Zehender, Dipl. Ing. (BA)
 Student, 10th semester computer science
 http://www.azweb.de
 az@azweb.de | zehender@kde.org      
--------------------------------------------------

["dockwidget.patch" (text/x-diff)]

? dockwidget.patch
? kdockwidget.loT
Index: kdockwidget.cpp
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget.cpp,v
retrieving revision 1.109
diff -u -r1.109 kdockwidget.cpp
--- kdockwidget.cpp	2002/08/29 14:58:57	1.109
+++ kdockwidget.cpp	2002/09/10 17:23:31
@@ -51,14 +51,25 @@
 #define DOCK_CONFIG_VERSION "0.0.5"
 
 static const char* const dockback_xpm[]={
+"6 6 2 1",
+"# c black",
+". c None",
+"......",
+".#....",
+"..#..#",
+"...#.#",
+"....##",
+"..####"};
+
+static const char* const todesktop_xpm[]={
 "5 5 2 1",
 "# c black",
 ". c None",
-"#....",
-".#...",
-"..#.#",
-"...##",
-"..###"};
+"####.",
+"##...",
+"#.#..",
+"#..#.",
+"....#"};
 
 static const char* const not_close_xpm[]={
 "5 5 2 1",
@@ -196,6 +207,8 @@
 KDockWidgetHeader::KDockWidgetHeader( KDockWidget* parent, const char* name )
 :KDockWidgetAbstractHeader( parent, name )
 {
+  d = new KDockWidgetHeaderPrivate( this );
+  
   layout = new QHBoxLayout( this );
   layout->setResizeMode( QLayout::Minimum );
 
@@ -219,10 +232,16 @@
   connect( dockbackButton, SIGNAL(clicked()), parent, SIGNAL(headerDockbackButtonClicked()));
   connect( dockbackButton, SIGNAL(clicked()), parent, SLOT(dockBack()));
 
+  d->toDesktopButton = new KDockButton_Private( this, "ToDesktopButton" );
+  d->toDesktopButton->setPixmap( const_cast< const char** >(todesktop_xpm));
+  d->toDesktopButton->setFixedSize(closeButton->pixmap()->width(),closeButton->pixmap()->height());
+  connect( d->toDesktopButton, SIGNAL(clicked()), parent, SLOT(toDesktop()));
+
   stayButton->hide();
   
   layout->addWidget( drag );
   layout->addWidget( dockbackButton );
+  layout->addWidget( d->toDesktopButton );
   layout->addWidget( stayButton );
   layout->addWidget( closeButton );
   layout->activate();
@@ -241,11 +260,13 @@
     }
     stayButton->hide();
     closeButton->hide();
+    d->toDesktopButton->hide();
     drag->setEnabled( true );
   } else {
     dockbackButton->hide();
     stayButton->hide();
     closeButton->show();
+    d->toDesktopButton->show();
   }
   layout->activate();
   updateGeometry();
@@ -264,6 +285,7 @@
 
   layout->addWidget( drag );
   layout->addWidget( dockbackButton );
+  layout->addWidget( d->toDesktopButton );
   layout->addWidget( stayButton );
   layout->addWidget( closeButton );
   layout->activate();
@@ -873,8 +895,16 @@
 	if (parent()->inherits("KDockSplitter"))
 		static_cast<KDockSplitter*>(parent()->qt_cast("KDockSplitter"))->restoreFromForcedFixedSize(this);	
 }
-
 
+void KDockWidget::toDesktop()
+{
+   QPoint p = mapToGlobal( QPoint( -30, -30 ) );
+   if( p.x( ) < 0 )
+      p.setX( 0 );
+   if( p.y( ) < 0 )
+      p.setY( 0 );
+   manualDock( 0, DockDesktop, 50, p );
+}
 
 void KDockWidget::undock()
 {
Index: kdockwidget.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget.h,v
retrieving revision 1.67
diff -u -r1.67 kdockwidget.h
--- kdockwidget.h	2002/07/04 21:03:17	1.67
+++ kdockwidget.h	2002/09/10 17:23:31
@@ -72,6 +72,7 @@
 class KDockWidget;
 class KDockButton_Private;
 class KDockWidgetPrivate;
+class KDockWidgetHeaderPrivate;
 class KDockArea;
 
 class QObjectList;
@@ -318,7 +319,6 @@
 protected:
   virtual void virtual_hook( int id, void* data );
 private:
-  class KDockWidgetHeaderPrivate;
   KDockWidgetHeaderPrivate *d;
 };
 
@@ -651,6 +651,11 @@
    * another dockwidget by mouse (docking).
    */
   void undock();
+
+  /**
+   * Docks the widget to the desktop (as a toplevel widget)
+   */
+  void toDesktop( );
 
 protected:
 
Index: kdockwidget_private.h
===================================================================
RCS file: /home/kde/kdelibs/kdeui/kdockwidget_private.h,v
retrieving revision 1.22
diff -u -r1.22 kdockwidget_private.h
--- kdockwidget_private.h	2002/07/04 21:03:17	1.22
+++ kdockwidget_private.h	2002/09/10 17:23:31
@@ -154,4 +154,16 @@
   QGuardedPtr<QWidget> container;
 };
 
+class KDockWidgetHeaderPrivate
+   : public QObject
+{
+public:
+  KDockWidgetHeaderPrivate( QObject* parent )
+        : QObject( parent )
+  {
+    toDesktopButton = 0;
+  }
+  KDockButton_Private* toDesktopButton;
+};
+
 #endif


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic