Duncan, for you
authorcoolo <coolo@e0cc52ee-31ee-0310-8b87-e83c4596d67c>
Wed, 5 Dec 2007 20:48:44 +0000 (20:48 +0000)
committercoolo <coolo@e0cc52ee-31ee-0310-8b87-e83c4596d67c>
Wed, 5 Dec 2007 20:48:44 +0000 (20:48 +0000)
git-svn-id: http://svn.opensuse.org/svn/yast/branches/tmp/coolo/qt4-port@42748 e0cc52ee-31ee-0310-8b87-e83c4596d67c

19 files changed:
VERSION.cmake
src/CMakeLists.txt
src/YQDialog.cc
src/YQDialog.h
src/YQEBunny.cc [deleted file]
src/YQEBunny.h [deleted file]
src/YQMainWinDock.cc [new file with mode: 0644]
src/YQMainWinDock.h [new file with mode: 0644]
src/YQUI.h
src/YQUI_builtins.cc
src/YQUI_core.cc
src/YQUI_x11.cc
src/YQWidgetFactory.cc
src/pkg/YQPackageSelectorBase.cc
src/pkg/YQPackageSelectorBase.h
src/pkg/YQPackageSelectorHelp.cc
src/pkg/YQPkgConflictDialog.cc
src/pkg/YQPkgConflictList.cc
src/pkg/YQPkgConflictList.h

index 842e658..e2c3989 100644 (file)
@@ -1,3 +1,3 @@
 SET(VERSION_MAJOR "2")
 SET(VERSION_MINOR "16")
-SET(VERSION_PATCH "6")
+SET(VERSION_PATCH "7")
index abbe0b1..55e47f5 100644 (file)
@@ -15,7 +15,7 @@ SET(qt4_yast_plugin_SRCS
   QY2ListView.cc QY2Settings.cc Y2CCQt.cc 
   YFrameBuffer.cc YQAlignment.cc YQApplication.cc YQBarGraph.cc 
   YQCheckBox.cc YQCheckBoxFrame.cc YQComboBox.cc YQDateField.cc 
-  YQDialog.cc YQDownloadProgress.cc YQDumbTab.cc YQEBunny.cc 
+  YQDialog.cc YQDownloadProgress.cc YQDumbTab.cc YQMainWinDock.cc 
   YQEmpty.cc YQFrame.cc YQGenericButton.cc YQIconPool.cc 
   YQImage.cc YQInputField.cc YQIntField.cc YQLabel.cc YQLayoutBox.cc 
   YQLogView.cc YQMenuButton.cc YQMultiLineEdit.cc 
index 8468e74..c4b23c3 100644 (file)
@@ -22,7 +22,6 @@
 #define y2log_component "qt-ui"
 #include <ycp/y2log.h>
 #include <qpushbutton.h>
-#include <qframe.h>
 #include <qmessagebox.h>
 #include <QDesktopWidget>
 
@@ -33,6 +32,7 @@
 #include "YQGenericButton.h"
 #include "YQWizardButton.h"
 #include "YQWizard.h"
+#include "YQMainWinDock.h"
 
 // Include low-level X headers AFTER Qt headers:
 // X.h pollutes the global namespace (!!!) with pretty useless #defines
 
 #define YQPopupDialogWFlags    Qt::Widget
 
-YQDialog::YQDialog( QWidget *          qParent,
-                   YDialogType         dialogType,
+/* FIXME
+#define YQPopupDialogWFlags            \
+    ( Qt::WStyle_Customize     |       \
+      Qt::WStyle_Dialog                |       \
+      Qt::WShowModal           |       \
+      Qt::WType_Modal          |       \
+      Qt::WStyle_DialogBorder   )
+*/
+
+
+YQDialog::YQDialog( YDialogType        dialogType,
                    YDialogColorMode    colorMode )
-    : QWidget( qParent,
+    : QWidget( chooseParent( dialogType ),
               dialogType == YMainDialog ? YQMainDialogWFlags : YQPopupDialogWFlags )
     , YDialog( dialogType, colorMode )
 {
@@ -55,7 +64,7 @@ YQDialog::YQDialog( QWidget *         qParent,
     _defaultButton     = 0;
 
     setWidgetRep( this );
-    setWindowTitle( dialogType == YMainDialog ? "YaST2" : "" );
+    setWindowTitle( "YaST2" );
     setFocusPolicy( Qt::StrongFocus );
 
     if ( colorMode != YDialogNormalColor )
@@ -76,15 +85,42 @@ YQDialog::YQDialog( QWidget *               qParent,
        warnPalette.setCurrentColorGroup(QPalette::Active);
        setPalette( warnPalette );
     }
+
+    if ( dialogType == YMainDialog &&
+        QWidget::parent() != YQMainWinDock::mainWinDock() )
+    {
+       setWindowFlags( YQPopupDialogWFlags );
+    }
 }
 
 
 YQDialog::~YQDialog()
 {
+    if ( dialogType() == YMainDialog )
+    {
+       YQMainWinDock::mainWinDock()->remove( (QWidget *) widgetRep() );
+    }
+}
+
+
+QWidget *
+YQDialog::chooseParent( YDialogType dialogType )
+{
+    QWidget * parent = 0;
+    
+    if ( dialogType == YMainDialog &&
+        YQMainWinDock::mainWinDock()->couldDock() )
+    {
+       y2debug( "Adding dialog to mainWinDock" );
+       parent = YQMainWinDock::mainWinDock();
+    }
+    
+    return parent;
 }
 
 
-int YQDialog::preferredWidth()
+int
+YQDialog::preferredWidth()
 {
     int preferredWidth;
 
@@ -112,7 +148,8 @@ int YQDialog::preferredWidth()
 }
 
 
-int YQDialog::preferredHeight()
+int
+YQDialog::preferredHeight()
 {
     int preferredHeight;
 
@@ -140,15 +177,19 @@ int YQDialog::preferredHeight()
 }
 
 
-void YQDialog::setEnabled( bool enabled )
+void
+YQDialog::setEnabled( bool enabled )
 {
     QWidget::setEnabled( enabled );
     YDialog::setEnabled( enabled );
 }
 
 
-void YQDialog::setSize( int newWidth, int newHeight )
+void
+YQDialog::setSize( int newWidth, int newHeight )
 {
+    // y2debug( "Resizing dialog to %d x %d", newWidth, newHeight );
+
     if ( newWidth > qApp->desktop()->width() )
        newWidth = qApp->desktop()->width();
 
@@ -164,19 +205,11 @@ void YQDialog::setSize( int newWidth, int newHeight )
 }
 
 
-
-void YQDialog::activate( bool active )
+void
+YQDialog::activate( bool active )
 {
     if ( active )
     {
-       if ( ! YQUI::ui()->haveWM() )
-       {
-           if ( YQUI::ui()->autoActivateDialogs() )
-               activateWindow();
-           else
-               y2milestone( "Auto-activating dialog window turned off" );
-       }
-
        ensureOnlyOneDefaultButton();
     }
 }
@@ -187,9 +220,12 @@ YQDialog::resizeEvent( QResizeEvent * event )
 {
     if ( event )
     {
+       // y2debug( "Resize event: %d x %d", event->size().width(), event->size().height() );
        setSize ( event->size().width(), event->size().height() );
-       _userSize    = event->size();
-       _userResized = true;
+       _userSize = event->size();
+
+       if ( QWidget::parent() )
+           _userResized = true;
     }
 }
 
@@ -317,7 +353,7 @@ YQDialog::ensureOnlyOneDefaultButton()
        YDialog::setDefaultButton( _defaultButton );
     }
 
-    
+
     YQGenericButton * def  = _focusButton ? _focusButton : _defaultButton;
 
     if ( def )
@@ -335,7 +371,6 @@ YQDialog::findWizard() const
 YQWizard *
 YQDialog::findWizard( YWidgetListConstIterator begin,
                      YWidgetListConstIterator end ) const
-
 {
     for ( YWidgetListConstIterator it = begin; it != end; ++it )
     {
@@ -427,7 +462,7 @@ YQDialog::setDefaultButton( YPushButton * newDefaultButton )
            _defaultButton->showAsDefault( true );
     }
 
-    
+
     YDialog::setDefaultButton( 0 ); // prevent complaints about multiple default buttons
     YDialog::setDefaultButton( _defaultButton );
 }
@@ -514,11 +549,6 @@ YQDialog::keyPressEvent( QKeyEvent * event )
            YQUI::ui()->makeScreenShot( "" );
            return;
        }
-       else if ( event->key() == Qt::Key_F5 )          // No matter if Ctrl/Alt/Shift pressed
-       {
-           YQUI::ui()->easterEgg();
-           return;
-       }
        else if ( event->key()   == Qt::Key_F4 &&       // Shift-F4: toggle colors for vision impaired users
                  event->modifiers() & Qt::ShiftModifier )
        {
@@ -592,23 +622,25 @@ YQDialog::keyPressEvent( QKeyEvent * event )
 }
 
 
-void YQDialog::closeEvent( QCloseEvent * event )
+void
+YQDialog::closeEvent( QCloseEvent * event )
 {
     // The window manager "close window" button (and WM menu, e.g. Alt-F4) will be
     // handled just like the user had clicked on the `id`( `cancel ) button in
     // that dialog. It's up to the YCP application to handle this (if desired).
 
-    y2debug( "Ignoring window manager close button." );
+    y2milestone( "Caught window manager close event - returning with YCancelEvent" );
     event->ignore();
     YQUI::ui()->sendEvent( new YCancelEvent() );
 }
 
 
-void YQDialog::focusInEvent( QFocusEvent * event )
+void
+YQDialog::focusInEvent( QFocusEvent * event )
 {
 
     // The dialog itself doesn't need or want the keyboard focus, but obviously
-    // ( since Qt 2.3? ) it needs QFocusPolicy::StrongFocus for the default
+    // (since Qt 2.3?) it needs QFocusPolicy::StrongFocus for the default
     // button mechanism to work. So let's accept the focus and give it to some
     // child widget.
 
@@ -626,40 +658,12 @@ void YQDialog::focusInEvent( QFocusEvent * event )
 }
 
 
-void
-YQDialog::show()
-{
-#if FIXME
-    if ( ! dialogType() == YMainDialog && qApp->mainWidget()->isVisible() )
-       center( this, qApp->mainWidget() );
-#endif
-
-    QWidget::show();
-}
-
-
 void
 YQDialog::center( QWidget * dialog, QWidget * parent )
 {
-    if ( ! dialog )
+    if ( ! dialog || ! parent )
         return;
 
-    if ( ! parent )
-    {
-        //FIXME if not toplevel window
-        // align with top level widget
-        foreach (QWidget *widget, QApplication::topLevelWidgets())
-        {
-            // if it is a top level widget, center with desktop
-            if (dialog == widget) parent = qApp->desktop(); break;
-        }
-
-        if ( QApplication::topLevelWidgets().empty() )
-          return;
-
-        parent = QApplication::topLevelWidgets().first();
-    }
-
     QPoint pos( ( parent->width()  - dialog->width()  ) / 2,
                 ( parent->height() - dialog->height() ) / 2 );
 
index f42242c..0bfb297 100644 (file)
@@ -43,8 +43,7 @@ public:
      * colors or YDialogInfoColor to use more prominent, yet not quite as
      * bright as "warning" colors. Use both only very rarely.
      **/
-    YQDialog( QWidget *                qParent,
-             YDialogType       dialogType,
+    YQDialog( YDialogType      dialogType,
              YDialogColorMode  colorMode = YDialogNormalColor );
 
 protected:
@@ -101,7 +100,7 @@ public:
     YQGenericButton * findDefaultButton();
 
     /**
-     * Returns whether or not the user has resized this dialog.
+     * Return 'true' if the user resized this dialog.
      **/
     bool userResized() { return _userResized; }
 
@@ -175,6 +174,13 @@ public:
 
 protected:
 
+    /**
+     * Choose a parent widget for a dialog of the specified type:
+     * Either the main window dock (if this is a YMainDialog and the dock
+     * currently accepts child dialogs) or 0.
+     **/
+    static QWidget * chooseParent( YDialogType dialogType );
+    
     /**
      * Return the (first) default button between 'begin' and 'end'
      * or 0 if there is none.
@@ -199,44 +205,24 @@ protected:
                                           YWidgetListConstIterator end );
 
     /**
-     * Event handler for keyboard input.
-     * Only very special keys are processed here.
-     *
-     * Inherited from QWidget.
-     **/
-    void keyPressEvent( QKeyEvent * e );
-
-
-    /**
-     * Event handler for focusIn event.
+     * Qt event handlers.
      *
-     * Inherited from QWidget.
-     **/
-    void focusInEvent( QFocusEvent * event );
-
-    /**
-     * Event handler for window resize.
-     *
-     * Inherited from QWidget.
-     **/
-    void resizeEvent ( QResizeEvent * ev );
-
-
-    /**
-     * Inherited from QWidget: Called when the dialog is shown.
+     * All reimplemented from QWidget.
      **/
-    void show();
+    virtual void keyPressEvent ( QKeyEvent     * event );
+    virtual void focusInEvent  ( QFocusEvent   * event );
+    virtual void resizeEvent   ( QResizeEvent  * event );
 
 
     //
     // Data members
     //
 
-    bool               _userResized;
-    QSize              _userSize;
+    bool               _userResized;
+    QSize              _userSize;
 
-    YQGenericButton *  _focusButton;
-    YQGenericButton *  _defaultButton;
+    YQGenericButton *  _focusButton;
+    YQGenericButton *  _defaultButton;
 };
 
 
diff --git a/src/YQEBunny.cc b/src/YQEBunny.cc
deleted file mode 100644 (file)
index d3e30a9..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-/*---------------------------------------------------------------------\
-|                                                                     |
-|                     __   __    ____ _____ ____                      |
-|                     \ \ / /_ _/ ___|_   _|___ \                     |
-|                      \ V / _` \___ \ | |   __) |                    |
-|                       | | (_| |___) || |  / __/                     |
-|                       |_|\__,_|____/ |_| |_____|                    |
-|                                                                     |
-|                              core system                            |
-|                                                       (C) SuSE GmbH |
-\----------------------------------------------------------------------/
-
-  File:              YQEBunny.cc
-
-  Authors:             Stefan Hundhammer <sh@suse.de>
-               Juergen Weigert <jw@suse.de> 
-               
-               Rectangles! Rounded rectangles everywhere, ...
-               A horror vision of the new CI.
-
-/-*/
-
-
-#define y2log_component "qt-easter-bunny"
-#include <ycp/y2log.h>
-#include <time.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include <qapplication.h>
-#include <qdesktopwidget.h>
-
-#include "YQEBunny.h"
-
-
-void
-YQEasterBunny::layEgg()
-{
-#if 0
-    const char * display = getenv( "DISPLAY" );
-
-    if ( ! display )
-    {
-       y2warning( "$DISPLAY not set - no easter egg" );
-       return;
-    }
-
-    if ( strcmp( display, ":0"   ) != 0 &&
-        strcmp( display, ":0.0" ) != 0   )
-    {
-       y2warning( "Not on system console - no easter egg" );
-       return;
-    }
-
-    QDesktopWidget * screen = QApplication::desktop();
-    int width  = screen->width();
-    int height = screen->height();
-    YFrameBuffer fb( width, height, screen->x11AppDepth() );
-
-    draw(&fb, width, height);
-#else
-    y2warning( "Easter egg disabled" );
-#endif
-}
-
-
-void
-YQEasterBunny::draw(YFrameBuffer *fb, int sw, int sh)
-{
-    // NOP
-}
diff --git a/src/YQEBunny.h b/src/YQEBunny.h
deleted file mode 100644 (file)
index fe23c9e..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/*---------------------------------------------------------------------\
-|                                                                     |
-|                     __   __    ____ _____ ____                      |
-|                     \ \ / /_ _/ ___|_   _|___ \                     |
-|                      \ V / _` \___ \ | |   __) |                    |
-|                       | | (_| |___) || |  / __/                     |
-|                       |_|\__,_|____/ |_| |_____|                    |
-|                                                                     |
-|                              core system                            |
-|                                                       (C) SuSE GmbH |
-\----------------------------------------------------------------------/
-
-  File:              YQEBunny.h
-
-  Author:     Stefan Hundhammer <sh@suse.de>
-
-/-*/
-
-
-#include "YFrameBuffer.h"
-
-#ifndef YQEasterBunny_h
-#define YQEasterBunny_h
-
-class YQEasterBunny
-{
-public:
-
-    static void layEgg();
-
-protected:
-
-    static void draw(YFrameBuffer *fb, int sw, int sh);
-};
-
-
-#endif // ifndef YQEasterBunny_h
diff --git a/src/YQMainWinDock.cc b/src/YQMainWinDock.cc
new file mode 100644 (file)
index 0000000..a7bfe7a
--- /dev/null
@@ -0,0 +1,260 @@
+/*---------------------------------------------------------------------\
+|                                                                     |
+|                     __   __    ____ _____ ____                      |
+|                     \ \ / /_ _/ ___|_   _|___ \                     |
+|                      \ V / _` \___ \ | |   __) |                    |
+|                       | | (_| |___) || |  / __/                     |
+|                       |_|\__,_|____/ |_| |_____|                    |
+|                                                                     |
+|                              core system                            |
+|                                                       (C) SuSE GmbH |
+\----------------------------------------------------------------------/
+
+  File:              YQMainWinDock.cc
+
+  Author:     Stefan Hundhammer <sh@suse.de>
+
+/-*/
+
+
+#define y2log_component "qt-ui"
+#include <ycp/y2log.h>
+#include <qtimer.h>
+
+#include <YDialog.h>
+#include <YQUI.h>
+#include <YEvent.h>
+#include "YQMainWinDock.h"
+
+
+
+YQMainWinDock *
+YQMainWinDock::mainWinDock()
+{
+    static YQMainWinDock * mainWinDock = 0;
+    
+    if ( ! mainWinDock )
+       mainWinDock = new YQMainWinDock();
+
+    return mainWinDock;
+}
+
+
+YQMainWinDock::YQMainWinDock()
+    : QWidget( 0, 0,            // parent, name
+              YQUI::ui()->noBorder() ?
+              Qt::WStyle_Customize | Qt::WStyle_NoBorder :
+              Qt::WType_TopLevel ) 
+{
+    setCaption( "YaST2" );
+
+    setFocusPolicy( QWidget::StrongFocus );
+
+    resize( YQUI::ui()->defaultSize( YD_HORIZ ),
+           YQUI::ui()->defaultSize( YD_VERT  ) );
+
+    y2debug( "MainWinDock initial size: %d x %d",
+            size().width(), size().height() );
+}
+
+
+YQMainWinDock::~YQMainWinDock()
+{
+    // NOP
+}
+
+
+void
+YQMainWinDock::childEvent( QChildEvent * event )
+{
+    if ( event )
+    {
+       QWidget * widget = dynamic_cast<QWidget *> ( event->child() );
+
+       if ( widget && event->inserted() )
+       {
+           add( widget );
+       }
+    }
+    
+    QWidget::childEvent( event );
+}
+
+
+void
+YQMainWinDock::resizeEvent( QResizeEvent * event )
+{
+    if ( event )
+    {
+       resize( event->size() );
+       resizeVisibleChild();
+    }
+}
+
+
+void
+YQMainWinDock::resizeVisibleChild()
+{
+    if ( ! _widgetStack.empty() )
+    {
+       QWidget * dialog = _widgetStack.back();
+
+       if ( dialog->size() != size() )
+       {
+           // y2debug( "Resizing child dialog %p to %d x %d", dialog, size().width(), size().height() );
+           dialog->resize( size() );
+       }
+    }
+}
+
+
+void
+YQMainWinDock::show()
+{
+    QWidget::show();
+    
+    if ( ! _widgetStack.empty() )
+    {
+       QWidget * dialog = _widgetStack.back();
+       dialog->raise();  
+       
+       if ( ! dialog->isShown() )
+           dialog->show();
+    }
+}
+
+
+void
+YQMainWinDock::add( QWidget * dialog )
+{
+    YUI_CHECK_PTR( dialog );
+
+    if ( ! dialog->isShown() )
+       dialog->show();
+
+    y2debug( "Adding dialog %p to mainWinDock", dialog );
+    _widgetStack.push_back( dialog );
+    resizeVisibleChild();
+    
+    if ( ! isShown() )
+       show();
+}
+
+
+void
+YQMainWinDock::showCurrentDialog()
+{
+    if ( ! _widgetStack.empty() )
+    {
+       QWidget * dialog = _widgetStack.back();
+       y2debug( "Showing dialog %p", dialog );
+       dialog->raise();
+       update();
+    }
+}
+
+
+void
+YQMainWinDock::remove( QWidget * dialog )
+{
+    if ( _widgetStack.empty() )
+       return;
+
+    if ( ! dialog )
+       dialog = _widgetStack.back();
+
+    if ( dialog == _widgetStack.back() )
+    {
+       // The most common case:
+       // The topmost dialog is to be removed
+
+       _widgetStack.pop_back();
+
+       y2debug( "Removing dialog %p from mainWinDock", dialog );
+    }
+    else // The less common (but more generic) case: Remove any dialog
+    {
+       YQMainWinDock::YQWidgetStack::iterator pos = findInStack( dialog );
+
+       if ( pos == _widgetStack.end() )
+           return;
+
+       y2warning( "Found dialog somewhere in the middle of the widget stack" );
+       y2debug( "Removing dialog %p from mainWinDock", dialog );
+       
+       _widgetStack.erase( pos );
+    }
+
+    if ( _widgetStack.empty() )                // No more main dialog?
+       hide();                         // -> hide dock
+    else
+    {
+       dialog = _widgetStack.back();   // Get the next dialog from the stack
+       dialog->raise();                // and raise it
+       resizeVisibleChild();
+    }
+}
+
+
+YQMainWinDock::YQWidgetStack::iterator
+YQMainWinDock::findInStack( QWidget * dialog )
+{
+    for ( YQMainWinDock::YQWidgetStack::iterator it = _widgetStack.begin();
+         it != _widgetStack.end();
+         ++it )
+    {
+       if ( *it == dialog )
+           return it;
+    }
+
+    return _widgetStack.end();
+}
+
+
+QWidget *
+YQMainWinDock::topmostDialog() const
+{
+    if ( _widgetStack.empty() )
+       return 0;
+    else
+       return _widgetStack.back();
+}
+
+
+bool
+YQMainWinDock::couldDock()
+{
+    YDialog * topDialog = YDialog::topmostDialog( false ); // don't throw
+
+    if ( ! topDialog ) // No dialog at all?
+       return true;    // Can dock the next one without problems
+
+    // The next dialog can be docked if there is no popup dialog currently open.
+    // This is equivalent to the topmost dialog on the YDialog stack being the
+    // same dialog as the topmost dialog of this MainWinDock.
+
+    return topDialog->widgetRep() == this->topmostDialog();
+}
+
+
+void
+YQMainWinDock::closeEvent( QCloseEvent * event )
+{
+    // The window manager "close window" button (and WM menu, e.g. Alt-F4) will be
+    // handled just like the user had clicked on the `id`( `cancel ) button in
+    // that dialog. It's up to the YCP application to handle this (if desired).
+
+    y2milestone( "Caught window manager close event - returning with YCancelEvent" );
+    event->ignore();
+    YQUI::ui()->sendEvent( new YCancelEvent() );
+}
+
+
+void
+YQMainWinDock::paintEvent( QPaintEvent * event )
+{
+    // NOP
+}
+
+
+#include "YQMainWinDock.moc"
diff --git a/src/YQMainWinDock.h b/src/YQMainWinDock.h
new file mode 100644 (file)
index 0000000..762d408
--- /dev/null
@@ -0,0 +1,176 @@
+/*---------------------------------------------------------------------\
+|                                                                     |
+|                     __   __    ____ _____ ____                      |
+|                     \ \ / /_ _/ ___|_   _|___ \                     |
+|                      \ V / _` \___ \ | |   __) |                    |
+|                       | | (_| |___) || |  / __/                     |
+|                       |_|\__,_|____/ |_| |_____|                    |
+|                                                                     |
+|                              core system                            |
+|                                                       (C) SuSE GmbH |
+\----------------------------------------------------------------------/
+
+  File:              YQMainWinDock.h
+
+  Author:     Stefan Hundhammer <sh@suse.de>
+
+/-*/
+
+
+#ifndef YQMainWinDock_h
+#define YQMainWinDock_h
+
+#include <deque>
+#include <qwidget.h>
+
+class QWidgetStack;
+
+
+/**
+ * Container window for YQDialogs of type YMainWindowDialog:
+ *
+ * This widget "swallows" any main dialogs it gets so only the topmost of them
+ * is visible at any given time. It acts as a window stack for main dialogs,
+ * making the next lower dialog on the stack visible as when the (previously)
+ * topmost main dialog is closed.
+ *
+ * This widget also handles its own visibility accordingly: It is visible if
+ * and only if it has a main dialog to display. It makes itself invisible when
+ * there is no more main dialog to display, and it makes itself visible again
+ * when a new main dialog appears.
+ *
+ * This widget can swallow an arbitrary number of main dialogs as they are
+ * opened as long as there is no popup dialog in between.
+ **/
+class YQMainWinDock : public QWidget
+{
+    Q_OBJECT
+
+public:
+    /**
+     * Static method to access the singleton for this class.
+     *
+     * This creates the (one and only) instance of this class in the first
+     * call. Subsequent calls simply return this instance.
+     **/
+    static YQMainWinDock * mainWinDock();
+
+    /**
+     * Add a dialog (the widgetRep() of a YQDialog) to the MainWinDock (on top
+     * of its widget stack. The widget stack does not assume ownership of the
+     * widget.
+     *
+     * If the MainWinDock is not visible yet, this operation makes it visible.
+     **/
+    void add( QWidget * dialog );
+
+    /**
+     * Remove a dialog from the MainWinDock (if it belongs to the
+     * MainWinDock). If dialog is 0, this removes the topmost dialog from the
+     * MainWinDock.
+     *
+     * This can safely be called in the destructor of all dialogs, even those
+     * that were never added to the MainWinDock.
+     *
+     * If that was the last main dialog in the MainWinDock, the MainWinDock
+     * will be hidden (until another main dialog is added).
+     **/
+    void remove( QWidget * dialog = 0 );
+
+    /**
+     * Return the current topmost dialog (the widgetRep() of a YQDialog)
+     * or 0 if there is none.
+     **/
+    QWidget * topmostDialog() const;
+
+    /**
+     * Return 'true' if the next main dialog could be docked,
+     * i.e., if there is either no open dialog at all or only main dialogs.
+     **/
+    bool couldDock();
+
+    /**
+     * Show the widget (make it visible).
+     *
+     * Reimplemented from QWidget.
+     **/
+    virtual void show();
+
+    /**
+     * Window manager close event (Alt-F4):
+     * Send a YCancelEvent and let the application handle that event.
+     *
+     * Reimplemented from QWidget.
+     **/
+    virtual void closeEvent( QCloseEvent * event );
+
+
+protected:
+    /**
+     * Constructor.
+     *
+     * Use the static mainWinDock() method to access the singleton for this
+     * class.
+     **/
+    YQMainWinDock();
+
+    /**
+     * Destructor.
+     **/
+    virtual ~YQMainWinDock();
+
+protected:
+
+    /**
+     * Paint event.
+     *
+     * Reimplemented from QWidget.
+     **/
+    virtual void paintEvent( QPaintEvent * event );
+
+    /**
+     * Child inserted/removed event.
+     *
+     * Reimplemented from QObject.
+     **/
+    virtual void childEvent( QChildEvent * event );
+
+    /**
+     * Resize event.
+     *
+     * Reimplemented from QWidget.
+     **/
+    virtual void resizeEvent( QResizeEvent * event );
+
+    /**
+     * Resize the visible child to the current size of the dock.
+     **/
+    void resizeVisibleChild();
+
+
+protected slots:
+
+    /**
+     * Show the current dialog.
+     **/
+    void showCurrentDialog();
+
+
+private:
+
+    typedef std::deque<QWidget *> YQWidgetStack;
+
+    /**
+     * Return an iterator to the specified dialog in the internal
+     * widgetstack or _widgetStack::end() if not found.
+     **/
+    YQWidgetStack::iterator findInStack( QWidget * dialog );
+
+
+    YQWidgetStack _widgetStack;
+};
+
+
+#endif // YQMainWinDock_h
+
+
index 54e702a..233b299 100644 (file)
@@ -133,23 +133,15 @@ public:
     YEvent * pendingEvent() const { return _event_handler.pendingEvent(); }
 
     /**
-     * Returns 'false" if the "--no-wm" was specified on the command line, i.e.
-     * we should assume no window manager is running.
-     **/
-    bool haveWM() const { return _have_wm; }
-
-    /**
-     * Returns 'true' if defaultsize windows should use the full screen.
+     * Return 'true' if defaultsize windows should use the full screen.
      **/
     bool fullscreen() const { return _fullscreen; }
 
     /**
-     * Returns 'false' if toplevel (defaultsize) windows should not get window
-     * manager decorations, i.e. "--noborder" was specified on the command
-     * line.
+     * Return 'true' if defaultsize windows should not get window manager
+     * borders / frames. 
      **/
-    bool decorateToplevelWindow() const { return _decorate_toplevel_window; }
-
+    bool noBorder() const { return _noborder; }
     /**
      * Returns 'true' if the UI had a fatal error that requires the application
      * to abort.
@@ -203,28 +195,6 @@ public:
      **/
     void internalError( const char * msg );
 
-
-    /**
-     * Block WM_CLOSE events for the main window.
-     **/
-    void blockWmClose()                { _wm_close_blocked = true;  }
-
-    /**
-     * Unblock WM_CLOSE events for the main window.
-     **/
-    void unblockWmClose()      { _wm_close_blocked = false; }
-
-    /**
-     * Check if dialogs are to be activated automatically
-     **/
-    bool autoActivateDialogs() const { return _auto_activate_dialogs; }
-
-    /**
-     * Change automatic dialog activation
-     **/
-    void setAutoActivateDialogs( bool activate )
-       { _auto_activate_dialogs = activate; }
-
     /**
      * Block (or unblock) events. If events are blocked, any event sent
      * should be ignored until events are unblocked again.
@@ -283,11 +253,6 @@ public slots:
      **/
     void askConfigureLogging();
 
-    /**
-     * Fun stuff (release dependent)
-     **/
-    void easterEgg();
-
     /**
      * A mouse click with the wrong mouse button was detected - e.g., a right
      * click on a push button. The user might be left-handed, but his mouse
@@ -300,13 +265,6 @@ public slots:
     void maybeLeftHandedUser();
 
 
-signals:
-    /**
-     * Emitted upon WM_CLOSE
-     **/
-    void wmClose();
-
-
 protected:
 
     /**
@@ -353,21 +311,6 @@ protected:
      **/
     void closeDialog( YDialog * dialog );
 
-    /**
-     * Grab show events and work around QWidgetStack bug.
-     *
-     * Reimplemented from QObject.
-     **/
-    bool eventFilter( QObject * obj, QEvent * ev );
-
-    /**
-     * Make all UI windows usable without a mouse - even predefined Qt dialogs
-     * that don't know the UI's dialogs' activate() magic.
-     *
-     * Reimplemented from QObject.
-     **/
-    bool showEventFilter( QObject * obj, QEvent * ev );
-
 
 public:
 
@@ -432,11 +375,6 @@ public:
                                const QString & filter,
                                const QString & headline );
 
-    /**
-     * main widget
-     **/
-    QWidget* mainWidget();
-
     /**
      * Initialize and set a textdomain for gettext()
      **/
@@ -544,20 +482,15 @@ protected:
     // Data members
     //
 
-    /**
-     * Assume presence of a window manager
-     **/
-    bool _have_wm;
-
     /**
      * Use the entire available screen
      **/
     bool _fullscreen;
 
     /**
-     * Decorate the toplevel window
+     * No window border for the main window
      **/
-    bool _decorate_toplevel_window;
+    bool _noborder;
 
     /**
      * Container for the widget stack. QWidgetStack cannot handle a WFlags
@@ -566,16 +499,6 @@ protected:
      **/
     QWidget * _main_win;
 
-    /**
-     * Stack for the Qt widgets inside the main window.
-     **/
-    QStackedWidget * _widget_stack;
-
-    /**
-     * Stack to keep track of the stacking order of popup dialogs.
-     **/
-    vector<QWidget *> _popup_stack;
-
     /**
      * Size for `opt(`defaultsize) dialogs.
      **/
@@ -594,18 +517,7 @@ protected:
      **/
     QEventLoop * _eventLoop;
 
-    /**
-     * Window manager close events blocked?
-     **/
-    bool _wm_close_blocked;
-
-    /**
-     * Force new dialogs to the foreground and grab the keyboard focus?
-     * (Only if running without a window manager)
-     **/
-    bool _auto_activate_dialogs;
-
-    /**
+    /*
      * Global reference to the UI
      **/
     static YQUI * _ui;
index 9beb939..682ea07 100644 (file)
@@ -78,9 +78,6 @@ YQUI::glyph( const YCPSymbol & glyphSymbol )
 YCPValue YQUI::runPkgSelection( YWidget * packageSelector )
 {
     y2milestone( "Running package selection..." );
-    _wm_close_blocked           = true;
-    _auto_activate_dialogs      = false;
-
     YCPValue input = YCPVoid();
 
     try
@@ -98,8 +95,6 @@ YCPValue YQUI::runPkgSelection( YWidget * packageSelector )
        y2error( "This is a libzypp problem. Do not file a bug against the UI!" );
     }
 
-    _auto_activate_dialogs      = true;
-    _wm_close_blocked           = false;
     y2milestone( "Package selection done - returning %s", input->toString().c_str() );
 
     return input;
index 1c58acf..61dee73 100644 (file)
@@ -41,7 +41,6 @@
 #include "YQOptionalWidgetFactory.h"
 #include "YEvent.h"
 #include "YUISymbols.h"
-#include "YQEBunny.h"
 #include "utf8.h"
 
 #include "YQDialog.h"
@@ -57,17 +56,14 @@ YQUI::YQUI( int argc, char **argv, bool with_threads, const char * macro_file )
     : QObject()
     , YUI( with_threads )
     , _main_win( NULL )
+    , _do_exit_loop( false )
     , _eventLoop( 0 )
-    , _wm_close_blocked( false )
-    , _auto_activate_dialogs( true )
 {
     y2milestone( "YQUI constructor start" );
 
     _ui                                = this;
     _fatal_error               = false;
-    _have_wm                   = true;
     _fullscreen                        = false;
-    _decorate_toplevel_window  = true;
     _usingVisionImpairedPalette        = false;
     _leftHandedMouse           = false;
     _askedForLeftHandedMouse   = false;
@@ -115,7 +111,6 @@ void YQUI::init_ui()
     // Qt keeps track to a global QApplication in qApp.
     Q_CHECK_PTR( qApp );
 
-    qApp->installEventFilter( this );
     processCommandLineArgs( _ui_argc, _ui_argv );
     calcDefaultSize();
 
@@ -132,34 +127,14 @@ void YQUI::init_ui()
     // We have to use something else than QWidgetStack since QWidgetStack
     // doesn't accept a WFlags arg which we badly need here.
 
-    Qt::WFlags wflags = Qt::Window;
-
-    if ( ! _decorate_toplevel_window )
-    {
-       y2debug( "Suppressing WM decorations for toplevel window" );
-       wflags |= Qt::FramelessWindowHint;
-    }
-
-    _main_win = new QWidget( 0, wflags ); // parent, wflags
+    _main_win = new QWidget( 0, Qt::Window ); // parent, wflags
     _main_win->setFocusPolicy( Qt::StrongFocus );
     _main_win->setObjectName( "main_window" );
     _styler->registerWidget( _main_win );
 
-    // Create widget stack for `opt(`defaultsize) dialogs
-    QVBoxLayout *vbox = new QVBoxLayout( _main_win );
-    vbox->setSpacing( 0 );
-    vbox->setMargin( 0 );
-
-    _widget_stack = new QStackedWidget( _main_win );
-    _widget_stack->setFocusPolicy( Qt::StrongFocus );
-    vbox->addWidget( _widget_stack );
-#if 0
-    _main_win->installEventFilter( this );
-#endif
-
     _main_win->resize( _default_size );
 
-    if ( _fullscreen || ! _have_wm )
+    if ( _fullscreen )
        _main_win->move( 0, 0 );
 
 
@@ -258,9 +233,8 @@ void YQUI::processCommandLineArgs( int argc, char **argv )
            if ( opt.startsWith( "--" ) )
                opt.remove(0, 1);
 
-           if      ( opt == QString( "-no-wm"          ) )     _have_wm                        = false;
-           else if ( opt == QString( "-fullscreen"     ) )     _fullscreen                     = true;
-           else if ( opt == QString( "-noborder"       ) )     _decorate_toplevel_window       = false;
+           if      ( opt == QString( "-fullscreen"     ) )     _fullscreen     = true;
+           else if ( opt == QString( "-noborder"       ) )     _noborder       = true;
            else if ( opt == QString( "-auto-font"      ) )     yqApp()->setAutoFonts( true );
            else if ( opt == QString( "-auto-fonts"     ) )     yqApp()->setAutoFonts( true );
            // --macro is handled by YUI_component
@@ -270,7 +244,6 @@ void YQUI::processCommandLineArgs( int argc, char **argv )
                         "Command line options for the YaST2 Qt UI:\n"
                         "\n"
                         "--nothreads   run without additional UI threads\n"
-                        "--no-wm       assume no window manager is running\n"
                         "--fullscreen  use full screen for `opt(`defaultsize) dialogs\n"
                         "--noborder    no window manager border for `opt(`defaultsize) dialogs\n"
                         "--auto-fonts  automatically pick fonts, disregard Qt standard settings\n"
@@ -348,7 +321,7 @@ void YQUI::calcDefaultSize()
         y2milestone( "-fullscreen: using %dx%d for `opt(`defaultsize)",
                     _default_size.width(), _default_size.height() );
     }
-    else if ( _have_wm )
+    else
     {
        // Get _default_size via -geometry command line option (if set)
 
@@ -358,7 +331,6 @@ void YQUI::calcDefaultSize()
 //     qApp->setMainWidget( dummy );
 //     _default_size = dummy->size();
 
-
         // Set min defaultsize or figure one out if -geometry was not used
 
        if ( _default_size.width()  < 800 ||
@@ -382,11 +354,6 @@ void YQUI::calcDefaultSize()
                         _default_size.width(), _default_size.height() );
        }
     }
-    else       // ! _have_wm
-    {
-       _default_size = primaryScreenSize;
-    }
-
 
     y2milestone( "Default size: %dx%d", _default_size.width(), _default_size.height() );
 }
@@ -465,8 +432,6 @@ YEvent * YQUI::userInput( unsigned long timeout_millisec )
        if ( timeout_millisec > 0 )
            _user_input_timer.start( timeout_millisec ); // single shot
 
-       dialog->activate( true );
-
        if ( qApp->focusWidget() )
            qApp->focusWidget()->setFocus();
 
@@ -476,7 +441,6 @@ YEvent * YQUI::userInput( unsigned long timeout_millisec )
        _do_exit_loop = false;
 
        event = _event_handler.consumePendingEvent();
-       dialog->activate( false );
 
        // Display a busy cursor, but only if there is no other activity within
        // BUSY_CURSOR_TIMEOUT milliseconds (avoid cursor flicker)
@@ -504,10 +468,8 @@ YEvent * YQUI::pollInput()
 
        if ( dialog )
        {
-           dialog->activate( true );
            //qApp->processEvents();
            event = _event_handler.consumePendingEvent();
-           dialog->activate( false );
        }
     }
 
@@ -525,62 +487,16 @@ void YQUI::userInputTimeout()
 }
 
 
-#warning obsolete
-#if 0
-YDialog * YQUI::createDialog( YWidgetOpt & opt )
-{
-    init_ui();
-
-    y2milestone( "createDialog %ld", QThread::currentThreadId () );
-    bool has_defaultsize = opt.hasDefaultSize.value();
-    QWidget * qt_parent =
-      has_defaultsize ? _widget_stack : _main_win;
-
-    // FIXME: Probably obsolete
-    if ( ! has_defaultsize && ! _popup_stack.empty() )
-       qt_parent = _popup_stack.back();
-
-    YQDialog * dialog = new YQDialog( opt, qt_parent, has_defaultsize );
-    Q_CHECK_PTR( dialog );
-
-    if ( ! has_defaultsize )
-       _popup_stack.push_back( (QWidget *) dialog->widgetRep() );
-
-    return dialog;
-}
-#endif
-
-
+#warning FIXME Move this to Y(Q)Dialog (and rename it to ::finalize()?)
 void YQUI::showDialog( YDialog * dialog )
 {
     QWidget * qw = (QWidget *) dialog->widgetRep();
-
-    if ( ! qw )
-    {
-       y2error( "No widgetRep() for dialog" );
-       return;
-    }
-
-    if ( dialog->dialogType() == YMainDialog )
-    {
-       _widget_stack->addWidget  ( qw );
-       _widget_stack->setCurrentWidget( qw );
-
-       if ( ! _main_win->isVisible() )
-       {
-           // y2milestone( "Showing main window" );
-           _main_win->resize( _default_size );
-
-           if ( ! _have_wm )
-               _main_win->move( 0, 0 );
-
-           _main_win->show();
-           qw->setFocus();
-       }
-    }
-    else       // non-defaultsize dialog
+    
+    if ( qw )
     {
        qw->show();
+       qw->raise();
+       qw->update();
     }
 
     ( (YQDialog *) dialog)->ensureOnlyOneDefaultButton();
@@ -591,49 +507,6 @@ void YQUI::showDialog( YDialog * dialog )
 
 void YQUI::closeDialog( YDialog * dialog )
 {
-    QWidget * qw = (QWidget *) dialog->widgetRep();
-
-    if ( ! qw )
-    {
-       y2error( "No widgetRep() for dialog" );
-       return;
-    }
-
-    if ( dialog->dialogType() == YMainDialog )
-    {
-       _widget_stack->removeWidget( qw );
-    }
-    else       // non-defaultsize dialog
-    {
-       qw->hide();
-
-#warning FIXME
-#if 0
-       // Clean up the popup stack. libyui guarantees that a dialog will be
-       // deleted after closeDialog() so it is safe to pop that dialog from
-       // the popup stack here.
-
-       if ( ! _popup_stack.empty() && _popup_stack.back() == qw )
-           _popup_stack.pop_back();
-       else
-           y2error( "Popup dialog stack corrupted!" );
-#endif
-    }
-}
-
-
-void YQUI::easterEgg()
-{
-    y2milestone( "Starting easter egg..." );
-
-
-    YQEasterBunny::layEgg();
-    y2milestone( "Done." );
-
-#if 0
-    // desktop()->repaint() has no effect - we need to do it the hard way.
-    system( "/usr/X11R6/bin/xrefresh" );
-#endif
 }
 
 
index 4c0544c..d2159e2 100644 (file)
@@ -82,19 +82,10 @@ int YQUI::getDefaultHeight()
 
 int YQUI::defaultSize(YUIDimension dim) const
 {
-    if ( haveWM() )
-       return dim == YD_HORIZ ? _default_size.width() : _default_size.height();
-    else
-       return dim == YD_HORIZ ? qApp->desktop()->width() : qApp->desktop()->height();
+    return dim == YD_HORIZ ? _default_size.width() : _default_size.height();
 }
 
 
-QWidget* YQUI::mainWidget()
-{
-    return _main_win;
-};
-
-
 void YQUI::beep()
 {
     qApp->beep();
@@ -178,82 +169,6 @@ bool YQUI::close()
 }
 
 
-bool YQUI::eventFilter( QObject * obj, QEvent * ev )
-{
-    if ( ev->type() == QEvent::Close )
-    {
-       // Handle WM_CLOSE - but only if it comes from a dialog that is managed by the UI,
-       // not from an independent Qt dialog (such as the package selector popups)
-
-       QWidget * objDialog = 0;
-
-       if ( obj && obj->isWidgetType() )
-       {
-           objDialog = (QWidget *) obj;
-           objDialog = objDialog->topLevelWidget();
-       }
-
-       if ( objDialog &&
-            ( objDialog == mainWidget() ||
-              objDialog == (QObject *) YDialog::currentDialog()->widgetRep() ) )
-       {
-           emit wmClose();
-
-           if ( ! _wm_close_blocked )
-           {
-               // Don't simply close the application window, return from UserInput()
-               // with `id(`cancel) and let the YCP application decide how to handle
-               // that (e.g., ask for confirmation).
-
-               y2debug( "Caught window close event - returning with `cancel" );
-               sendEvent( new YCancelEvent() );
-           }
-
-           return true;        // Event processed
-       }
-    }
-    else if ( ev->type() == QEvent::Show )
-    {
-       if ( obj == _main_win )
-       {
-#ifdef FIXME_PROBABLY_OBSOLETE
-           if ( _widget_stack->count() > 0 )
-           {
-               // Work around QWidgetStack bug: The last raiseWidget() call
-               // (from closeDialog() ) might have failed if the widget was
-               // invisible at that time, e.g., because the user had switched to
-               // some other virtual desktop (bugzilla bug #11310)
-
-               _widget_stack->setCurrentWidget( whatever );
-           }
-#endif
-       }
-       else
-       {
-           return showEventFilter( obj, ev );
-       }
-    }
-    return QObject::eventFilter( obj, ev );
-}
-
-
-bool YQUI::showEventFilter( QObject * obj, QEvent * ev )
-{
-    if ( ! haveWM() )
-    {
-       // Make sure newly opened windows get the keyboard focus even without a
-       // window manager. Otherwise the app might be unusable without a mouse.
-
-       QWidget * widget = dynamic_cast<QWidget *> (obj);
-
-       if ( widget )
-           widget->activateWindow();
-    }
-
-    return false;      // Don't stop event processing
-}
-
-
 /**
  * UI-specific conversion from logical layout spacing units (80x25)
  * to device dependent units (640x480).
index 82b97fe..ebb7bcc 100644 (file)
 /-*/
 
 #include <QColorGroup>
+#define y2log_component "qt-ui"
+#include <ycp/y2log.h>
+
 #include "YQWidgetFactory.h"
 #include "YQUI.h"
 #include "YUIException.h"
 #include "YQPackageSelectorPlugin.h"
+#include "YQMainWinDock.h"
 
 #include <string>
 
@@ -47,8 +51,7 @@ YQWidgetFactory::~YQWidgetFactory()
 YQDialog *
 YQWidgetFactory::createDialog( YDialogType dialogType, YDialogColorMode colorMode )
 {
-    QWidget * qParent = 0;
-    YQDialog * dialog = new YQDialog( qParent, dialogType, colorMode );
+    YQDialog * dialog = new YQDialog( dialogType, colorMode );
     YUI_CHECK_NEW( dialog );
 
     return dialog;
@@ -279,8 +282,6 @@ YQWidgetFactory::createMultiSelectionBox( YWidget * parent, const string & label
 YQPackageSelector *
 YQWidgetFactory::createPackageSelector( YWidget * parent, long modeFlags )
 {
-    YQUI::ui()->setAutoActivateDialogs( false );
-
     YQPackageSelectorPlugin * plugin = YQUI::ui()->packageSelectorPlugin();
 
     if ( plugin )
index dba1209..121125c 100644 (file)
@@ -66,7 +66,6 @@ YQPackageSelectorBase::YQPackageSelectorBase( YWidget * parent,
 
     YQUI::setTextdomain( "packages-qt" );
     setFont( YQUI::yqApp()->currentFont() );
-    YQUI::ui()->blockWmClose(); // Automatically undone after UI::RunPkgSelection()
 
     _pkgConflictDialog = new YQPkgConflictDialog( this );
     Q_CHECK_PTR( _pkgConflictDialog );
@@ -87,12 +86,8 @@ YQPackageSelectorBase::YQPackageSelectorBase( YWidget * parent,
     zyppPool().saveState<zypp::Patch    >();
 
 
-    //
-    // Handle WM_CLOSE like "Cancel"
-    //
-
-    connect( YQUI::ui(),       SIGNAL( wmClose() ),
-            this,              SLOT  ( reject()   ) );
+    // Install event handler to handle WM_CLOSE like "Cancel"
+    topLevelWidget()->installEventFilter( this );
 
     y2milestone( "PackageSelectorBase init done" );
 }
@@ -390,17 +385,26 @@ YQPackageSelectorBase::keyPressEvent( QKeyEvent * event )
                return;
            }
        }
-       else if ( event->key() == Qt::Key_F5 )  // No matter if Ctrl/Alt/Shift pressed
-       {
-           YQUI::ui()->easterEgg();
-           return;
-       }
     }
 
     QWidget::keyPressEvent( event );
 }
 
 
+bool YQPackageSelectorBase::eventFilter( QObject * obj, QEvent * event )
+{
+    if ( event->type() == QEvent::Close )
+    {
+       // Handle WM_CLOSE like "Cancel"
+       reject();
+
+       return true;    // Stop processing this event
+    }
+
+    return false;      // Don't stop processing this event
+}
+
+
 int YQPackageSelectorBase::preferredWidth()
 {
     return max( 640, sizeHint().width() );
index 2569dbe..4ee7b0b 100644 (file)
@@ -91,7 +91,14 @@ public:
      **/
     virtual bool setKeyboardFocus();
 
+    /**
+     * Event filter to handle WM_CLOSE like "Cancel"
+     *
+     * Reimplemented from QObject.
+     **/
+    virtual bool eventFilter( QObject * obj, QEvent * event );
 
+    
 public slots:
 
     /**
index 6e1d93d..528aa1c 100644 (file)
@@ -139,38 +139,38 @@ YQPackageSelector::symbolHelp()
     html += "<table border=1>";
 
     html += symHelp( "noinst.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Do not install" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is not installed and it will not be installed." ) );
 
     html += symHelp( "install.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Install" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package will be installed. It is not installed yet." ) );
 
     html += symHelp( "keepinstalled.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Keep" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed. Leave it untouched." ) );
 
     html += symHelp( "update.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Update" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed. Update it or reinstall it"
                        " (if the versions are the same)." ) );
 
     html += symHelp( "del.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Delete" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed. Delete it." ) );
 
     html += symHelp( "taboo.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Taboo" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is not installed and should not be installed under any circumstances, "
@@ -180,7 +180,7 @@ YQPackageSelector::symbolHelp()
                     + _( "Packages set to \"taboo\" are treated as if they did not exist on any installation media." ) );
 
     html += symHelp( "protected.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Protected" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is installed and should not be modified, "
@@ -191,7 +191,7 @@ YQPackageSelector::symbolHelp()
                          " that may come with the distribution." ) );
 
     html += symHelp( "autoinstall.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autoinstall" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package will be installed automatically because some other package needs it." )
@@ -199,14 +199,14 @@ YQPackageSelector::symbolHelp()
                     + _( "<b>Hint:</b> You may have to use \"taboo\" to get rid of such a package." ) );
 
     html += symHelp( "autoupdate.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autoupdate" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed, but some other package"
                        " needs a newer version, so it will automatically be updated." ) );
 
     html += symHelp( "autodel.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autodelete" ),
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed, but package dependencies require that it is deleted." )
@@ -218,14 +218,14 @@ YQPackageSelector::symbolHelp()
     QString bySelection = " " + _( "(by&nbsp;selection)" );
 
     html += symHelp( "sel_autoinstall.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autoinstall" ) + bySelection,
                     // Translators: Automatic word-wrapping.
                     _( "This package will be installed automatically because it is contained in a"
                        " predefined software selection (e.g., \"Multimedia\", \"Development\")." ) );
 
     html += symHelp( "sel_autoupdate.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autoupdate" ) + bySelection,
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed, but there is a newer version."
@@ -234,7 +234,7 @@ YQPackageSelector::symbolHelp()
                        " automatically be updated." ) );
 
     html += symHelp( "sel_autodel.xpm",
-                    // Translators: Package status short ( ! ) description
+                    // Translators: Package status short (!) description
                     _( "Autodelete" ) + bySelection,
                     // Translators: Automatic word-wrapping.
                     _( "This package is already installed, but some predefined software selection"
@@ -276,7 +276,7 @@ YQPackageSelector::keyboardHelp()
     html += "<table border=1>";
 
     html += keyHelp( "+",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Add" ),
                     // Translators: Automatic word-wrapping.
                     _( "Get this package. Install it if it is not installed yet."
@@ -285,7 +285,7 @@ YQPackageSelector::keyboardHelp()
                     + goto_next );
 
     html += keyHelp( "-",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Remove" ),
                     // Translators: Automatic word-wrapping.
                     _( "Get rid of this package. Mark it as \"do not install\" "
@@ -293,7 +293,7 @@ YQPackageSelector::keyboardHelp()
                     + goto_next );
 
     html += keyHelp( "&gt;",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Update" ),
                     // Translators: Automatic word-wrapping.
                     _( "Update this package if it is installed and there is a newer version."
@@ -302,7 +302,7 @@ YQPackageSelector::keyboardHelp()
 
 
     html += keyHelp( "&lt;",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Undo Update" ),
                     // Translators: Automatic word-wrapping.
                     _( "Undo the effect of \">\" above: Set package to \"keep\""
@@ -310,7 +310,7 @@ YQPackageSelector::keyboardHelp()
                     + goto_next );
 
     html += keyHelp( "!",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Taboo" ),
                     // Translators: Automatic word-wrapping.
                     _( "Set this package to \"taboo\" if it is not installed:"
@@ -322,7 +322,7 @@ YQPackageSelector::keyboardHelp()
                     + goto_next );
 
     html += keyHelp( "*",
-                    // Translators: Keyboard action short ( ! ) description
+                    // Translators: Keyboard action short (!) description
                     _( "Protect" ),
                     // Translators: Automatic word-wrapping.
                     _( "Set this package to \"protected\" if it is installed:"
index 467a97f..dbb7f2e 100644 (file)
@@ -148,7 +148,7 @@ YQPkgConflictDialog::YQPkgConflictDialog( QWidget * parent )
 
     _busyPopup = new QLabel( "   " + _( "Checking Dependencies..." ) + "   ", parent, 0
 #ifdef FIXME
-                            , WType_Dialog
+                            , WStyle_Customize | WStyle_DialogBorder | WStyle_Dialog | WStyle_Title
 #endif
                             );
     Q_CHECK_PTR( _busyPopup );
index 840e049..a473f3e 100644 (file)
@@ -352,7 +352,10 @@ YQPkgConflict::addSolutions()
 
     while ( it != solutions.end() )
     {
-       new YQPkgConflictResolution( _resolutionsHeader, *it );
+       YQPkgConflictResolution * solution = new YQPkgConflictResolution( _resolutionsHeader, *it );
+       Q_CHECK_PTR( solution );
+       //FIXME solution->setOpen(true);
+
        ++it;
     }
 }
index 0e8605d..e59b0d4 100644 (file)
@@ -111,7 +111,7 @@ public:
     static void dumpList( QTreeWidgetItem *    parent,
                          const QString &       longText,
                          const QString &       header = QString::null,
-                         int                   splitThreshold = 5 );
+                         int                   splitThreshold = 3 );
 
 protected: