Hello, here is my first try of a patch.
The two patches add the ability of the qt-frontend to automatically store and retrieve the mainwindow position (x,y,width,height) in/from the lyx preferences file. - preferences.diff Adds 5 new settings to lyx preferences file: geometry_xysaved (bool) geometry_xpos (int) geometry_ypos (int) geometry_width (int) geometry_height (int) - qt.diff modifies start() to get the width, height, x, y settings from the preferences. If no settings are stored - e.g. first run or update from older version - use the default width, height and let the qt toolkit decide where to position the new window. modifies exit() to get the acutal mainwindow geometry and store them in the lyx preferences files. Ok? cu Armin =============================================================== http://www.ahammer.ch -------------- PGP public key on request
Index: src/ChangeLog =================================================================== RCS file: /cvs/lyx/lyx-devel/src/ChangeLog,v retrieving revision 1.2182 diff -u -r1.2182 ChangeLog --- src/ChangeLog 2005/05/12 12:22:35 1.2182 +++ src/ChangeLog 2005/05/29 09:21:36 @@ -1,3 +1,9 @@ +2005-05-28 Armin Hammer <[EMAIL PROTECTED]> + + * lyxfunc.C, lyxrc.[hC]: added geometry_xpos, geometry_ypos, + geometry_xysaved, geometry_width, geometry_height to store + the main window geometry in the preferences file + 2005-05-12 Martin Vermeer <[EMAIL PROTECTED]> * tabular.[hC]: added setCellInset to fix tabular paste. Index: src/lyxfunc.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyxfunc.C,v retrieving revision 1.657 diff -u -r1.657 lyxfunc.C --- src/lyxfunc.C 2005/05/06 20:00:30 1.657 +++ src/lyxfunc.C 2005/05/29 09:21:39 @@ -1973,6 +1973,11 @@ case LyXRC::RC_SCREEN_FONT_SIZES: case LyXRC::RC_SCREEN_FONT_TYPEWRITER: case LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY: + case LyXRC::RC_SCREEN_GEOMETRY_HEIGHT: + case LyXRC::RC_SCREEN_GEOMETRY_WIDTH: + case LyXRC::RC_SCREEN_GEOMETRY_XPOS: + case LyXRC::RC_SCREEN_GEOMETRY_XYSAVED: + case LyXRC::RC_SCREEN_GEOMETRY_YPOS: case LyXRC::RC_SCREEN_ZOOM: case LyXRC::RC_SERVERPIPE: case LyXRC::RC_SET_COLOR: Index: src/lyxrc.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyxrc.C,v retrieving revision 1.189 diff -u -r1.189 lyxrc.C --- src/lyxrc.C 2005/04/26 11:12:10 1.189 +++ src/lyxrc.C 2005/05/29 09:21:41 @@ -148,6 +148,11 @@ { "\\screen_font_sizes", LyXRC::RC_SCREEN_FONT_SIZES }, { "\\screen_font_typewriter", LyXRC::RC_SCREEN_FONT_TYPEWRITER }, { "\\screen_font_typewriter_foundry", LyXRC::RC_SCREEN_FONT_TYPEWRITER_FOUNDRY }, + { "\\screen_geometry_height", LyXRC::RC_SCREEN_GEOMETRY_HEIGHT }, + { "\\screen_geometry_width", LyXRC::RC_SCREEN_GEOMETRY_WIDTH }, + { "\\screen_geometry_xpos", LyXRC::RC_SCREEN_GEOMETRY_XPOS }, + { "\\screen_geometry_xysaved", LyXRC::RC_SCREEN_GEOMETRY_XYSAVED }, + { "\\screen_geometry_ypos", LyXRC::RC_SCREEN_GEOMETRY_YPOS }, { "\\screen_zoom", LyXRC::RC_SCREEN_ZOOM }, { "\\serverpipe", LyXRC::RC_SERVERPIPE }, { "\\set_color", LyXRC::RC_SET_COLOR }, @@ -281,6 +286,12 @@ user_name = lyx::support::user_name(); user_email = lyx::support::user_email(); + + geometry_xysaved = false; + geometry_xpos = -1; + geometry_ypos = -1; + geometry_width = 690; + geometry_height = 510; } @@ -775,6 +786,36 @@ } break; + case RC_SCREEN_GEOMETRY_HEIGHT: + if (lexrc.next()) { + geometry_height = lexrc.getInteger(); + } + break; + + case RC_SCREEN_GEOMETRY_WIDTH: + if (lexrc.next()) { + geometry_width = lexrc.getInteger(); + } + break; + + case RC_SCREEN_GEOMETRY_XPOS: + if (lexrc.next()) { + geometry_xpos = lexrc.getInteger(); + } + break; + + case RC_SCREEN_GEOMETRY_XYSAVED: + if (lexrc.next()) { + geometry_xysaved = lexrc.getBool(); + } + break; + + case RC_SCREEN_GEOMETRY_YPOS: + if (lexrc.next()) { + geometry_ypos = lexrc.getInteger(); + } + break; + case RC_POPUP_BOLD_FONT: if (lexrc.next()) { popup_bold_font = lexrc.getString(); @@ -1549,6 +1590,37 @@ << '\n'; } + case RC_SCREEN_GEOMETRY_HEIGHT: + if (ignore_system_lyxrc || + geometry_height != system_lyxrc.geometry_height) { + os << "\\screen_geometry_height " << geometry_height + << '\n'; + } + case RC_SCREEN_GEOMETRY_WIDTH: + if (ignore_system_lyxrc || + geometry_width != system_lyxrc.geometry_width) { + os << "\\screen_geometry_width " << geometry_width + << '\n'; + } + case RC_SCREEN_GEOMETRY_XYSAVED: + if (ignore_system_lyxrc || + geometry_xysaved != system_lyxrc.geometry_xysaved) { + os << "\\screen_geometry_xysaved " << convert<string>(geometry_xysaved) + << '\n'; + } + case RC_SCREEN_GEOMETRY_XPOS: + if (ignore_system_lyxrc || + geometry_xpos != system_lyxrc.geometry_xpos) { + os << "\\screen_geometry_xpos " << geometry_xpos + << '\n'; + } + case RC_SCREEN_GEOMETRY_YPOS: + if (ignore_system_lyxrc || + geometry_ypos != system_lyxrc.geometry_ypos) { + os << "\\screen_geometry_ypos " << geometry_ypos + << '\n'; + } + os << "\n#\n" << "# COLOR SECTION ###################################\n" << "#\n\n"; @@ -2353,6 +2425,14 @@ case RC_SCREEN_FONT_SIZES: str = _("The font sizes used for calculating the scaling of the screen fonts."); + break; + + case RC_SCREEN_GEOMETRY_HEIGHT: + case RC_SCREEN_GEOMETRY_WIDTH: + case RC_SCREEN_GEOMETRY_XYSAVED: + case RC_SCREEN_GEOMETRY_XPOS: + case RC_SCREEN_GEOMETRY_YPOS: + str = _("Specify geometry of the main view in width x height and if flag enabled also + xpos + ypos."); break; case RC_SCREEN_ZOOM: Index: src/lyxrc.h =================================================================== RCS file: /cvs/lyx/lyx-devel/src/lyxrc.h,v retrieving revision 1.93 diff -u -r1.93 lyxrc.h --- src/lyxrc.h 2005/03/25 15:27:29 1.93 +++ src/lyxrc.h 2005/05/29 09:21:42 @@ -115,7 +115,12 @@ RC_SCREEN_FONT_SCALABLE, RC_SCREEN_FONT_SIZES, RC_SCREEN_FONT_TYPEWRITER, - RC_SCREEN_FONT_TYPEWRITER_FOUNDRY, + RC_SCREEN_FONT_TYPEWRITER_FOUNDRY, + RC_SCREEN_GEOMETRY_HEIGHT, + RC_SCREEN_GEOMETRY_WIDTH, + RC_SCREEN_GEOMETRY_XPOS, + RC_SCREEN_GEOMETRY_XYSAVED, + RC_SCREEN_GEOMETRY_YPOS, RC_SCREEN_ZOOM, RC_SERVERPIPE, RC_SET_COLOR, @@ -384,6 +389,16 @@ * The string is input, stored and output in native format. */ std::string path_prefix; + /// True if xpos/ypos are specified in preferences + bool geometry_xysaved; + /// XPosition of MainWindow + int geometry_xpos; + /// YPosition of MainWindow + int geometry_ypos; + /// Width of MainWindow + int geometry_width; + /// Height of MainWindow + int geometry_height; };
Index: src/frontends/qt2/ChangeLog =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/ChangeLog,v retrieving revision 1.779 diff -u -r1.779 ChangeLog --- src/frontends/qt2/ChangeLog 2005/05/13 08:33:01 1.779 +++ src/frontends/qt2/ChangeLog 2005/05/29 09:21:51 @@ -1,3 +1,8 @@ +2005-05-28 Armin Hammer <[EMAIL PROTECTED]> + + lyx_gui.C: added window size restore from preference file + in start() and window size save code in exit() + 2005-05-09 Michael Schmitt <[EMAIL PROTECTED]> * *.C: strip "LyX: " prefix from dialog titles; harmonize Index: src/frontends/qt2/lyx_gui.C =================================================================== RCS file: /cvs/lyx/lyx-devel/src/frontends/qt2/lyx_gui.C,v retrieving revision 1.83 diff -u -r1.83 lyx_gui.C --- src/frontends/qt2/lyx_gui.C 2005/05/13 08:33:01 1.83 +++ src/frontends/qt2/lyx_gui.C 2005/05/29 09:21:51 @@ -27,6 +27,7 @@ #include "graphics/LoaderQueue.h" +#include "support/path.h" #include "support/lstrings.h" #include "support/os.h" #include "support/package.h" @@ -60,6 +61,7 @@ using lyx::support::ltrim; using lyx::support::package; +using lyx::support::Path; using lyx::frontend::QtView; @@ -219,13 +221,12 @@ void start(string const & batch, vector<string> const & files) { - // initial geometry - unsigned int width = 690; - unsigned int height = 510; - - boost::shared_ptr<QtView> view_ptr(new QtView(width, height)); + boost::shared_ptr<QtView> view_ptr(new QtView(lyxrc.geometry_width, lyxrc.geometry_height)); LyX::ref().addLyXView(view_ptr); + if ( lyxrc.geometry_xysaved) + view_ptr->move( lyxrc.geometry_xpos, lyxrc.geometry_ypos); + QtView & view = *view_ptr.get(); view.show(); view.init(); @@ -267,6 +268,17 @@ void exit() { + QWidget * view = qApp->mainWidget(); + + lyxrc.geometry_xysaved = true; + lyxrc.geometry_height = view->height(); + lyxrc.geometry_width = view->width(); + lyxrc.geometry_xpos = view->x(); + lyxrc.geometry_ypos = view->y(); + + Path p(package().user_support()); + lyxrc.write("preferences", false); + delete lyxsocket; delete lyxserver; lyxserver = 0;