Author: sh-sh-sh
Date: Thu Jan 31 15:30:44 2008
New Revision: 44069
URL: http://svn.opensuse.org/viewcvs/yast?rev=44069&view=rev
Log:
Simplified dialog handling
Modified:
trunk/core/VERSION
trunk/core/libyui/src/ChangeLog
trunk/core/libyui/src/YCPErrorDialog.cc
trunk/core/libyui/src/YDialog.cc
trunk/core/libyui/src/YDialog.h
trunk/core/libyui/src/YUI.h
trunk/core/libyui/src/YUIException.h
trunk/core/libyui/src/YUI_builtins.cc
trunk/core/package/yast2-core.changes
trunk/ncurses/VERSION
trunk/ncurses/package/yast2-ncurses.changes
trunk/ncurses/src/NCDialog.cc
trunk/ncurses/src/NCDialog.h
trunk/ncurses/src/YNCursesUI.cc
trunk/ncurses/src/YNCursesUI.h
trunk/qt/VERSION.cmake
trunk/qt/src/YQDialog.cc
trunk/qt/src/YQDialog.h
trunk/qt/src/YQUI_core.cc
trunk/qt/yast2-qt.spec.in
Modified: trunk/core/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/VERSION?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/VERSION (original)
+++ trunk/core/VERSION Thu Jan 31 15:30:44 2008
@@ -1 +1 @@
-2.16.24
+2.16.25
Modified: trunk/core/libyui/src/ChangeLog
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/ChangeLog?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/ChangeLog (original)
+++ trunk/core/libyui/src/ChangeLog Thu Jan 31 15:30:44 2008
@@ -484,3 +484,13 @@
* Moved YCP part out of YEvent to new class YCPEvent
* YUI::runPkgSelection() now returns YEvent * and is pure virtual
+
+
+2008-01-31 sh@suse.de
+
+* Moved dialog handling from YUI to YDialog:
+ - removed YUI::showDialog()
+ - removed YUI::closeDialog()
+ - Now using YDialog::open() and YDialog::destroy()
+ - Derived classes now have to implement YDialog::openInternal()
+ and YDialog::activate()
Modified: trunk/core/libyui/src/YCPErrorDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YCPErrorDialog.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YCPErrorDialog.cc (original)
+++ trunk/core/libyui/src/YCPErrorDialog.cc Thu Jan 31 15:30:44 2008
@@ -51,20 +51,19 @@
fac->createHStretch( buttonBox );
YPushButton * closeButton = fac->createPushButton( buttonBox, "&Close" );
closeButton->setId( new YCPValueWidgetID( YCPSymbol( "cancel" ) ) );
-
- dialog->setInitialSize();
- dialog->checkShortcuts();
- YUI::ui()->showDialog( dialog );
+ dialog->open();
YCPValue input = YUI::ui()->waitForUserInput();
yuiMilestone() << "Input: " << input << endl;
- YUI::ui()->closeDialog( YDialog::currentDialog() );
- YDialog::deleteTopmostDialog();
+ dialog->destroy();
}
catch ( YUIException & ex )
{
YUI_CAUGHT( exception );
+
+ // No other action. If opening this error dialog fails, the user will
+ // just have to live with the error being reported in the log file only.
}
catch ( ... )
{
Modified: trunk/core/libyui/src/YDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YDialog.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YDialog.cc (original)
+++ trunk/core/libyui/src/YDialog.cc Thu Jan 31 15:30:44 2008
@@ -40,12 +40,14 @@
, colorMode( colorMode )
, shortcutCheckPostponed( false )
, defaultButton( 0 )
+ , isOpen( false )
{}
YDialogType dialogType;
YDialogColorMode colorMode;
bool shortcutCheckPostponed;
YPushButton * defaultButton;
+ bool isOpen;
};
@@ -55,7 +57,7 @@
, priv( new YDialogPrivate( dialogType, colorMode ) )
{
YUI_CHECK_NEW( priv );
-
+
_dialogStack.push( this );
#if VERBOSE_DIALOGS
@@ -69,6 +71,57 @@
#if VERBOSE_DIALOGS
yuiDebug() << "Destroying " << this << endl;
#endif
+
+ if ( ! _dialogStack.empty() && _dialogStack.top() == this )
+ {
+ _dialogStack.pop();
+
+ if ( ! _dialogStack.empty() )
+ _dialogStack.top()->activate();
+ }
+ else
+ yuiError() << "Not top of dialog stack: " << this << endl;
+}
+
+
+void
+YDialog::open()
+{
+ if ( priv->isOpen )
+ return;
+
+ checkShortcuts();
+ setInitialSize();
+ openInternal(); // Make sure this is only called once!
+
+ priv->isOpen = true;
+}
+
+
+bool
+YDialog::isOpen() const
+{
+ return priv->isOpen;
+}
+
+
+bool
+YDialog::destroy( bool doThrow )
+{
+ YUI_CHECK_WIDGET( this );
+
+ if ( _dialogStack.empty() ||
+ _dialogStack.top() != this )
+ {
+ if ( doThrow )
+ YUI_THROW( YUIDialogStackingOrderException() );
+
+ return false;
+ }
+
+ delete this;
+
+ return true;
}
@@ -145,12 +198,21 @@
#if VERBOSE_DIALOGS
yuiDebug() << "Setting initial size for " << this << endl;
#endif
-
+
// Trigger geometry management
setSize( preferredWidth(), preferredHeight() );
}
+void
+YDialog::recalcLayout()
+{
+ yuiDebug() << "Recalculating layout for " << this << endl;
+
+ setSize( preferredWidth(), preferredHeight() );
+}
+
+
YDialog *
@@ -178,7 +240,6 @@
else
{
delete _dialogStack.top();
- _dialogStack.pop();
}
return ! _dialogStack.empty();
@@ -188,8 +249,31 @@
void
YDialog::deleteAllDialogs()
{
- while ( deleteTopmostDialog( false ) )
- {}
+ while ( ! _dialogStack.empty() )
+ {
+ delete _dialogStack.top();
+ }
+}
+
+
+void
+YDialog::deleteTo( YDialog * targetDialog )
+{
+ YUI_CHECK_WIDGET( targetDialog );
+
+ while ( ! _dialogStack.empty() )
+ {
+ YDialog * dialog = _dialogStack.top();
+
+ delete dialog;
+
+ if ( dialog == targetDialog )
+ return;
+ }
+
+ // If we ever get here, targetDialog was nowhere in the dialog stack.
+
+ YUI_THROW( YUIDialogStackingOrderException() );
}
Modified: trunk/core/libyui/src/YDialog.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YDialog.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YDialog.h (original)
+++ trunk/core/libyui/src/YDialog.h Thu Jan 31 15:30:44 2008
@@ -48,7 +48,8 @@
/**
* Destructor.
- * Don't delete a dialog directly, use YDialog::deleteTopmostDialog().
+ * Don't delete a dialog directly, use YDialog::deleteTopmostDialog()
+ * or YDialog::destroy().
**/
virtual ~YDialog();
@@ -60,10 +61,47 @@
virtual const char * widgetClass() const { return "YDialog"; }
/**
+ * Open a newly created dialog: Finalize it and make it visible
+ * on the screen.
+ *
+ * Applications should call this once after all children are created.
+ * If the application doesn't do this, it will be done automatically upon
+ * the next call of YDialog::waitForEvent() (or related). This is OK if
+ * YDialog::waitForEvent() is called immediately after creating the dialog
+ * anyway. If it is not, the application might appear sluggish to the user.
+ *
+ * Derived classes are free to reimplement this, but they should call this
+ * base class method in the new implementation.
+ **/
+ void open();
+
+ /**
+ * Return 'true' if open() has already been called for this dialog.
+ **/
+ bool isOpen() const;
+
+ /**
+ * Close and delete this dialog (and all its children) if it is the topmost
+ * dialog. If this is not the topmost dialog, this will throw an exception
+ * if 'doThrow' is true (default).
+ *
+ * Remember that all pointers to the dialog and its children will be
+ * invalid after this operation.
+ *
+ * This is intentionally not named close() since close() would not imply
+ * that the dialog and its children are deleted.
+ *
+ * Returns 'true' upon success, 'false' upon failure.
+ **/
+ bool destroy( bool doThrow = true );
+
+ /**
* Delete the topmost dialog.
*
* Will throw a YUINoDialogException if there is no dialog and 'doThrow' is
- * 'true'.
+ * 'true'.
+ *
+ * This is equivalent to YDialog::currentDialog()->destroy().
*
* Returns 'true' if there is another open dialog after deleting,
* 'false' if there is none.
@@ -76,6 +114,11 @@
static void deleteAllDialogs();
/**
+ * Delete all dialogs from the topmost to the one specified.
+ **/
+ static void deleteTo( YDialog * dialog );
+
+ /**
* Returns the number of currently open dialogs (from 1 on), i.e., the
* depth of the dialog stack.
**/
@@ -103,6 +146,20 @@
void setInitialSize();
/**
+ * Recalculate the layout of the dialog and of all its children after
+ * children have been added or removed or if any of them changed its
+ * preferred width of height.
+ *
+ * This is a very expensive operation. Call it only when really necessary.
+ * YDialog::open() includes a call to YDialog::setInitialSize() which does
+ * the same.
+ *
+ * The basic idea behind this function is to call it when the dialog
+ * changed after it (and its children hierarchy) was initially created.
+ **/
+ void recalcLayout();
+
+ /**
* Return this dialog's type (YMainDialog / YPopupDialog).
**/
YDialogType dialogType() const;
@@ -153,9 +210,29 @@
**/
virtual void setDefaultButton( YPushButton * defaultButton );
+ /**
+ * Activate this dialog: Make sure that it is shown as the topmost dialog
+ * of this application and that it can receive input.
+ *
+ * Derived classes are required to implement this.
+ **/
+ virtual void activate() = 0;
+
protected:
+ /**
+ * Internal open() method. This is called (exactly once during the life
+ * time of the dialog) in open().
+ *
+ * Derived classes are required to implement this to do whatever is
+ * necessary to make this dialog visible on the screen.
+ **/
+ virtual void openInternal() = 0;
+
+ /**
+ * Stack holding all currently existing dialogs.
+ **/
static std::stack _dialogStack;
private:
Modified: trunk/core/libyui/src/YUI.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YUI.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YUI.h (original)
+++ trunk/core/libyui/src/YUI.h Thu Jan 31 15:30:44 2008
@@ -427,22 +427,6 @@
virtual YEvent * pollInput() = 0;
-public:
- /**
- * Show and activate a previously created dialog.
- * This default implementation does nothing.
- **/
- virtual void showDialog( YDialog *dialog );
-
- /**
- * Decativate and close a previously created dialog.
- * This default implementation does nothing.
- *
- * Don't delete the dialog. This will be done at some other place.
- **/
- virtual void closeDialog( YDialog *dialog );
-
-
protected:
Modified: trunk/core/libyui/src/YUIException.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YUIException.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YUIException.h (original)
+++ trunk/core/libyui/src/YUIException.h Thu Jan 31 15:30:44 2008
@@ -457,6 +457,18 @@
};
+class YUIDialogStackingOrderException: public YUIException
+{
+public:
+ YUIDialogStackingOrderException()
+ : YUIException( "Dialog stacking order violated" )
+ {}
+
+ virtual ~YUIDialogStackingOrderException() throw()
+ {}
+};
+
+
class YUISyntaxErrorException: public YUIException
{
public:
Modified: trunk/core/libyui/src/YUI_builtins.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/libyui/src/YUI_builtins.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/libyui/src/YUI_builtins.cc (original)
+++ trunk/core/libyui/src/YUI_builtins.cc Thu Jan 31 15:30:44 2008
@@ -712,6 +712,8 @@
YDialog::currentDialog()->dumpWidgetTree();
#endif
+ YDialog::currentDialog()->activate();
+
delete widgetEvent;
return 0;
}
@@ -791,10 +793,7 @@
YUI_CHECK_NEW( dialog );
YCPDialogParser::parseWidgetTreeTerm( dialog, dialogTerm );
-
- dialog->setInitialSize();
- dialog->checkShortcuts();
- showDialog( dialog );
+ dialog->open();
}
catch ( YUIException & exception )
{
@@ -830,28 +829,13 @@
YCPValue YUI::evaluateCloseDialog()
{
blockEvents(); // We don't want self-generated events from UI builtins.
-
- closeDialog( YDialog::currentDialog() );
YDialog::deleteTopmostDialog();
-
unblockEvents();
return YCPBoolean( true );
}
-void YUI::showDialog( YDialog * )
-{
- // dummy default implementation
-}
-
-
-void YUI::closeDialog( YDialog * )
-{
- // dummy default implementation
-}
-
-
/**
* @builtin ChangeWidget
Modified: trunk/core/package/yast2-core.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/core/package/yast2-core.changes?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/core/package/yast2-core.changes (original)
+++ trunk/core/package/yast2-core.changes Thu Jan 31 15:30:44 2008
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Thu Jan 31 15:25:52 CET 2008 - sh@suse.de
+
+- Simplified and unified internal UI dialog handling
+- V 2.16.25
+
+-------------------------------------------------------------------
Tue Jan 29 20:02:26 CET 2008 - sh@suse.de
- YCP-less event handling in libyui core
Modified: trunk/ncurses/VERSION
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/VERSION?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/VERSION (original)
+++ trunk/ncurses/VERSION Thu Jan 31 15:30:44 2008
@@ -1 +1 @@
-2.16.12
+2.16.13
Modified: trunk/ncurses/package/yast2-ncurses.changes
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/package/yast2-ncurses.changes?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/package/yast2-ncurses.changes (original)
+++ trunk/ncurses/package/yast2-ncurses.changes Thu Jan 31 15:30:44 2008
@@ -1,4 +1,10 @@
-------------------------------------------------------------------
+Thu Jan 31 15:27:49 CET 2008 - sh@suse.de
+
+- Simplified dialog handling
+- V 2.16.13
+
+-------------------------------------------------------------------
Thu Jan 31 14:22:36 CET 2008 - kmachalkova@suse.cz
- Align numbers in IntFields to the right margin of the label, not
Modified: trunk/ncurses/src/NCDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/src/NCDialog.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/src/NCDialog.cc (original)
+++ trunk/ncurses/src/NCDialog.cc Thu Jan 31 15:30:44 2008
@@ -247,6 +247,13 @@
}
}
+
+void NCDialog::openInternal()
+{
+ showDialog();
+}
+
+
///////////////////////////////////////////////////////////////////
//
//
@@ -324,6 +331,20 @@
}
}
+
+/**
+ * Implementation of YDialog::activate().
+ *
+ * This is called e.g. for the next-lower dialog in the dialog stack when the
+ * topmost dialog is destroyed: That next-lower dialog is now the active
+ * dialog.
+ **/
+void NCDialog::activate()
+{
+ activate( true ); // Forward to NCurses-specific activate()
+}
+
+
///////////////////////////////////////////////////////////////////
//
//
Modified: trunk/ncurses/src/NCDialog.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/src/NCDialog.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/src/NCDialog.h (original)
+++ trunk/ncurses/src/NCDialog.h Thu Jan 31 15:30:44 2008
@@ -119,6 +119,20 @@
virtual void startMultipleChanges();
virtual void doneMultipleChanges();
+
+ /**
+ * Internal open() method: Initialize what is left over to initialize after
+ * all dialog children have been created.
+ * YDialog::setInitialSize() is already called before this in
+ * YDailog::open(), so don't call it here again (very expensive!).
+ *
+ * This function is called (exactly once during the life time of the
+ * dialog) in YDialog::open().
+ *
+ * Implemented from YDialog.
+ **/
+ virtual void openInternal();
+
public:
@@ -148,6 +162,14 @@
**/
virtual void setSize( int newWidth, int newHeight );
+ /**
+ * Activate this dialog: Make sure that it is shown as the topmost dialog
+ * of this application and that it can receive input.
+ *
+ * Implemented from YDialog.
+ **/
+ virtual void activate();
+
protected:
enum NCDopts {
Modified: trunk/ncurses/src/YNCursesUI.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/src/YNCursesUI.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/src/YNCursesUI.cc (original)
+++ trunk/ncurses/src/YNCursesUI.cc Thu Jan 31 15:30:44 2008
@@ -307,28 +307,6 @@
return yevent;
}
-///////////////////////////////////////////////////////////////////
-//
-// Dialog and widgets
-//
-///////////////////////////////////////////////////////////////////
-
-void YNCursesUI::showDialog( YDialog * dialog ) {
- NCDialog * dlg = dynamic_cast( dialog );
- UIDBG << dlg << endl;
- if ( dlg )
- {
- dlg->showDialog();
- //dlg->dumpWidgetTree();
- }
-}
-
-void YNCursesUI::closeDialog( YDialog * dialog ) {
- NCDialog * dlg = dynamic_cast( dialog );
- UIDBG << dlg << endl;
- if ( dlg )
- dlg->closeDialog();
-}
#define ONCREATE WIDDBG << endl
//#define ONCREATE
Modified: trunk/ncurses/src/YNCursesUI.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/ncurses/src/YNCursesUI.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/ncurses/src/YNCursesUI.h (original)
+++ trunk/ncurses/src/YNCursesUI.h Thu Jan 31 15:30:44 2008
@@ -122,16 +122,6 @@
virtual YEvent * pollInput();
/**
- * Inherited from YUIInterpreter. Shows and activates a dialog
- */
- virtual void showDialog( YDialog * dialog );
-
- /**
- * Inherited from YUIInterpreter. Decativates and closes a dialog
- */
- virtual void closeDialog( YDialog * dialog );
-
- /**
* Fills the PackageSelector widget and runs package selection.
*/
virtual YEvent * runPkgSelection( YWidget * packageSelector );
Modified: trunk/qt/VERSION.cmake
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/VERSION.cmake?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/qt/VERSION.cmake (original)
+++ trunk/qt/VERSION.cmake Thu Jan 31 15:30:44 2008
@@ -1,3 +1,3 @@
SET(VERSION_MAJOR "2")
SET(VERSION_MINOR "16")
-SET(VERSION_PATCH "19")
+SET(VERSION_PATCH "20")
Modified: trunk/qt/src/YQDialog.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQDialog.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/qt/src/YQDialog.cc (original)
+++ trunk/qt/src/YQDialog.cc Thu Jan 31 15:30:44 2008
@@ -118,6 +118,24 @@
}
+void
+YQDialog::openInternal()
+{
+ ensureOnlyOneDefaultButton();
+ QWidget::show();
+ QWidget::raise(); // FIXME: is this really necessary?
+ QWidget::update();
+}
+
+
+void
+YQDialog::activate()
+{
+ QWidget::raise();
+ QWidget::update();
+}
+
+
int
YQDialog::preferredWidth()
{
@@ -212,10 +230,12 @@
void
YQDialog::activate( bool active )
{
+#if 0
if ( active )
{
ensureOnlyOneDefaultButton();
}
+#endif
}
Modified: trunk/qt/src/YQDialog.h
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQDialog.h?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/qt/src/YQDialog.h (original)
+++ trunk/qt/src/YQDialog.h Thu Jan 31 15:30:44 2008
@@ -203,8 +203,24 @@
**/
YQWizard * ensureOnlyOneDefaultButton( YWidgetListConstIterator begin,
YWidgetListConstIterator end );
+
+ /**
+ * Internal open() method, called exactly once during the life
+ * time of the dialog in open().
+ *
+ * Implemented from YDialog.
+ **/
+ virtual void openInternal();
/**
+ * Activate this dialog: Make sure that it is shown as the topmost dialog
+ * of this application and that it can receive input.
+ *
+ * Implemented from YDialog.
+ **/
+ virtual void activate();
+
+ /**
* Qt event handlers.
*
* All reimplemented from QWidget.
Modified: trunk/qt/src/YQUI_core.cc
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/src/YQUI_core.cc?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/qt/src/YQUI_core.cc (original)
+++ trunk/qt/src/YQUI_core.cc Thu Jan 31 15:30:44 2008
@@ -171,7 +171,7 @@
// Hide the main window for now. The first call to UI::OpenDialog() on an
- // `opt(`defaultSize) dialog will trigger a showDialog() call that shows
+ // `opt(`defaultSize) dialog will trigger a dialog->open() call that shows
// the main window - there is nothing to display yet.
_main_win->hide();
@@ -523,29 +523,6 @@
}
-#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 )
- {
- qw->show();
- qw->raise();
- qw->update();
- }
-
- ( (YQDialog *) dialog)->ensureOnlyOneDefaultButton();
-
- //qApp->processEvents();
-}
-
-
-void YQUI::closeDialog( YDialog * dialog )
-{
-}
-
-
QString YQUI::productName() const
{
return fromUTF8( YUI::productName() );
Modified: trunk/qt/yast2-qt.spec.in
URL: http://svn.opensuse.org/viewcvs/yast/trunk/qt/yast2-qt.spec.in?rev=44069&r1=44068&r2=44069&view=diff
==============================================================================
--- trunk/qt/yast2-qt.spec.in (original)
+++ trunk/qt/yast2-qt.spec.in Thu Jan 31 15:30:44 2008
@@ -6,8 +6,8 @@
Summary: -
BuildRequires: yast2-devtools >= 2.16.3
-BuildRequires: yast2-core-devel >= 2.16.24
-Requires: yast2-core >= 2.16.24
+BuildRequires: yast2-core-devel >= 2.16.25
+Requires: yast2-core >= 2.16.25
Requires: yast2_theme >= 2.16.1
Requires: libzypp >= 3.11.8
Provides: yast2_ui
--
To unsubscribe, e-mail: yast-commit+unsubscribe@opensuse.org
For additional commands, e-mail: yast-commit+help@opensuse.org