Georg Baum wrote:
> Am Donnerstag, 15. Juni 2006 17:44 schrieb Enrico Forestieri:
>> On Thu, Jun 15, 2006 at 05:30:40PM +0200, Peter Kümmel wrote:
>>> Does this patch help?
>> Yes, -geometry works again. Thanks :)
>
> But the logic does not seem to be correct: If you have stored geometry
> values and a -geometry switch, the -geometry switch should be used and
> the lyxrc values ignored. The patch does not look like that.
>
> From the documentation of QApplication::setMainWidget:
>
> For X11, this function also resizes and moves the main widget according to
> the -geometry command-line option, so you should set the default geometry
> (using QWidget::setGeometry()) before calling setMainWidget().
This change is why it doesn't work any more with the geomentry option,
setMainWidget is NOT called after the resize.
Index: qt3/QtView.C
===================================================================
--- qt3/QtView.C (revision 14094)
+++ qt3/QtView.C (working copy)
@@ -55,14 +55,9 @@
-QtView::QtView(unsigned int width, unsigned int height, bool maximize)
+QtView::QtView(unsigned int width, unsigned int height)
: QMainWindow(), LyXView(), commandbuffer_(0)
{
- resize(width, height);
-
- if (maximize)
- this->setWindowState(WindowMaximized);
-
qApp->setMainWidget(this);
Index: qt3/lyx_gui.C
===================================================================
--- qt3/lyx_gui.C (revision 14094)
+++ qt3/lyx_gui.C (working copy)
@@ -227,16 +227,19 @@
// this can't be done before because it needs the Languages object
initEncodings();
- boost::shared_ptr<QtView> view_ptr(new QtView(width, height, maximize));
+ boost::shared_ptr<QtView> view_ptr(new QtView(width, height));
LyX::ref().addLyXView(view_ptr);
QtView & view = *view_ptr.get();
- if (posx != -1 && posy != -1)
- view.move(QPoint(posx, posy));
+ view.init();
+
+ view.setGeometry(posx, posy, width, height);
+ if (maximize)
+ view.setWindowState(WindowMaximized);
+
view.show();
- view.init();
// FIXME: some code below needs moving
The original lyx/Qt3 logic was:
1. create QtView in start
2. in the QtView ctor: resize and setMainWidget,
thus geometry option is applied if there is any
3. back in start check if (posx != -1 && posy != -1)
is true if yes move widget
(init() does not call any geometry functions)
Is 'if (posx != -1 && posy != -1)' really the right way to
check if lyx wqas called with the geometry option?
I prefer to handle all the geometry stuff in start so please
try the attached patch (as I understand the docs we could drop the resize
when afterwards setMainWidget is called):
Index: qt3/lyx_gui.C
===================================================================
--- qt3/lyx_gui.C (revision 14122)
+++ qt3/lyx_gui.C (working copy)
@@ -235,9 +235,12 @@
view.init();
if (posx != -1 && posy != -1) {
+ qApp->setMainWidget(&view);
view.setGeometry(posx, posy, width, height);
if (maximize)
view.setWindowState(Qt::WindowMaximized);
+ } else {
+ qApp->setMainWidget(&view);
}
view.show();
Index: qt3/QtView.C
===================================================================
--- qt3/QtView.C (revision 14120)
+++ qt3/QtView.C (working copy)
@@ -58,8 +58,6 @@
QtView::QtView(unsigned int width, unsigned int height)
: QMainWindow(), LyXView(), commandbuffer_(0)
{
- qApp->setMainWidget(this);
-
bufferview_.reset(new BufferView(this, width, height));
menubar_.reset(new QLMenubar(this, menubackend));