On Wed, Nov 29, 2006 at 03:49:31PM +0100, Peter Kümmel wrote: > Enrico Forestieri wrote: > > I am not so sure, but yes, now that I know it is a Qt4 limitation I > > could try to implement it. After all, I don't want that you make the > > work for me ;-) > > But I have done. ;-)
I owe you a beer, Peter! Please, find attached a revised version also taking into account cygwin builds without X11. I simply changed the #ifdef's. -- Enrico
Index: src/frontends/Application.h =================================================================== --- src/frontends/Application.h (Revision 16100) +++ src/frontends/Application.h (Arbeitskopie) @@ -172,7 +172,8 @@ /// Create the main window with given geometry settings. LyXView & createView(unsigned int width, unsigned int height, - int posx, int posy, bool maximize, unsigned int iconSizeXY); + int posx, int posy, bool maximize, unsigned int iconSizeXY, + const std::string & geometryArg); /// LyXView const & currentView() const; Index: src/frontends/LyXView.h =================================================================== --- src/frontends/LyXView.h (Revision 16100) +++ src/frontends/LyXView.h (Arbeitskopie) @@ -88,7 +88,8 @@ unsigned int height, int posx, int posy, bool maximize, - unsigned int iconSizeXY) = 0; + unsigned int iconSizeXY, + const std::string & geometryArg) = 0; /// save the geometry state in the session manager. virtual void saveGeometry() = 0; Index: src/frontends/qt4/GuiView.h =================================================================== --- src/frontends/qt4/GuiView.h (Revision 16100) +++ src/frontends/qt4/GuiView.h (Arbeitskopie) @@ -61,7 +61,8 @@ unsigned int height, int posx, int posy, bool maximize, - unsigned int iconSizeXY); + unsigned int iconSizeXY, + const std::string & geometryArg); virtual void saveGeometry(); virtual void busy(bool); Toolbars::ToolbarPtr makeToolbar(ToolbarBackend::Toolbar const & tbb); Index: src/frontends/qt4/GuiView.C =================================================================== --- src/frontends/qt4/GuiView.C (Revision 16102) +++ src/frontends/qt4/GuiView.C (Arbeitskopie) @@ -244,7 +244,8 @@ unsigned int height, int posx, int posy, bool maximize, - unsigned int iconSizeXY) + unsigned int iconSizeXY, + const std::string & geometryArg) { // use last value (not at startup) if (d.lastIconSize != 0) @@ -278,6 +279,20 @@ if (maximize) setWindowState(Qt::WindowMaximized); } + else + { +#ifdef Q_WS_WIN + int x, y; + int w, h; + QRegExp re( "[=]*(?:([0-9]+)[xX]([0-9]+)){0,1}[ ]*(?:([+-][0-9]*)([+-][0-9]*)){0,1}" ); + re.indexIn( toqstr(geometryArg.c_str())); + w = re.cap( 1 ).toInt(); + h = re.cap( 2 ).toInt(); + x = re.cap( 3 ).toInt(); + y = re.cap( 4 ).toInt(); + QWidget::setGeometry( x, y, w, h ); +#endif + } show(); Index: src/frontends/Application.C =================================================================== --- src/frontends/Application.C (Revision 16100) +++ src/frontends/Application.C (Arbeitskopie) @@ -52,7 +52,8 @@ unsigned int height, int posx, int posy, bool maximize, - unsigned int iconSizeXY) + unsigned int iconSizeXY, + const std::string & geometryArg) { int view_id = gui().newView(); LyXView & view = gui().view(view_id); @@ -62,7 +63,7 @@ /*int workArea_id_ =*/ gui().newWorkArea(width, height, view_id); view.init(); - view.setGeometry(width, height, posx, posy, maximize, iconSizeXY); + view.setGeometry(width, height, posx, posy, maximize, iconSizeXY, geometryArg); setCurrentView(view); Index: src/lyx_main.C =================================================================== --- src/lyx_main.C (Revision 16100) +++ src/lyx_main.C (Arbeitskopie) @@ -116,6 +116,8 @@ string cl_system_support; string cl_user_support; +std::string geometryArg; + LyX * singleton_ = 0; void showFileError(string const & error) @@ -193,10 +195,11 @@ LyX::LyX() - : first_start(false), geometryOption_(false) + : first_start(false) { singleton_ = this; pimpl_.reset(new Singletons); + geometryArg.clear(); } @@ -603,12 +606,14 @@ posy = convert<int>(val); } - if (geometryOption_) { + if (!geometryArg.empty()) + { width = 0; height = 0; } + // create the main window - LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY); + LyXView * view = &pimpl_->application_->createView(width, height, posx, posy, maximize, iconSizeXY, geometryArg); return view; } @@ -1273,6 +1278,19 @@ return 2; } +int parse_geometry(string const & arg1, string const &) +{ + geometryArg = arg1; +#if defined(_WIN32) || (defined(__CYGWIN__) && defined(X_DISPLAY_MISSING)) + // remove also the arg + return 1; +#else + // don't remove "-geometry" + return -1; +#endif +} + + } // namespace anon @@ -1293,15 +1311,12 @@ cmdmap["--export"] = parse_export; cmdmap["-i"] = parse_import; cmdmap["--import"] = parse_import; + cmdmap["-geometry"] = parse_geometry; for (int i = 1; i < argc; ++i) { std::map<string, cmd_helper>::const_iterator it = cmdmap.find(argv[i]); - // check for X11 -geometry option - if (support::compare(argv[i], "-geometry") == 0) - geometryOption_ = true; - // don't complain if not found - may be parsed later if (it == cmdmap.end()) continue; Index: src/lyx_main.h =================================================================== --- src/lyx_main.h (Revision 16100) +++ src/lyx_main.h (Arbeitskopie) @@ -163,9 +163,6 @@ /// Use the Pimpl idiom to hide the internals. struct Singletons; boost::scoped_ptr<Singletons> pimpl_; - - /// - bool geometryOption_; }; } // namespace lyx