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

Reply via email to