Enrico Forestieri wrote:
> 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!
Next time when I'm in Italy ;)
>
> Please, find attached a revised version also taking into account cygwin
> builds without X11. I simply changed the #ifdef's.
>
>
>
> ------------------------------------------------------------------------
>
> 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))
AH, here shell_type shell() does not work.
Should we add something like usingWin32Frontend() to os.h?
> + // 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
--
Peter Kümmel