Hi Bo, i've hacked the get/set function for the qt frontend on macosx some time ago. Perhaps you can clean it up.
lyx_gui.diff : qt frontend code to get/set the window size and position lyxrc_C.diff, lyxfunc.diff, lyxrc_h.diff : to save/retrieve the infos from the Lyx Settings file. The patches are agains 1.4.0 and only tested on macosx. mit freundlichen Gruessen / Yours Armin Hammer -------- Original Message -------- Subject: What is the qt functions to get/set position of the main window? Date: Sat, 25 Mar 2006 12:12:19 -0600 From: Bo Peng <[EMAIL PROTECTED]> To: LyX-Devel <lyx-devel@lists.lyx.org> Dear list, I am trying to preserve windows position and size for qt main window. size seems to be easy but I could not find relevant functions for windows position. Can anyone help? Cheers, Bo
--- ../lyx-1.4.0/src/lyxrc.C 2005-12-12 12:13:03.000000000 +0100 +++ src/lyxrc.C 2005-12-19 07:55:10.000000000 +0100 @@ -151,6 +151,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 }, @@ -284,6 +289,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; } @@ -759,6 +770,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_SCREEN_FONT_ROMAN_FOUNDRY: if (lexrc.next()) { roman_font_foundry = lexrc.getString(); @@ -1517,6 +1558,37 @@ << typewriter_font_foundry << "\"\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'; + } + case RC_SCREEN_FONT_SCALABLE: if (ignore_system_lyxrc || use_scalable_fonts != system_lyxrc.use_scalable_fonts) { @@ -2380,6 +2452,14 @@ 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: //xgettext:no-c-format str = _("The zoom percentage for screen fonts. A setting of 100% will make the fonts roughly the same size as on paper.");
--- ../lyx-1.4.0/src/lyxfunc.C 2006-01-18 18:44:01.000000000 +0100 +++ src/lyxfunc.C 2005-12-19 07:54:55.000000000 +0100 @@ -2047,6 +2046,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:
--- ../lyx-1.4.0/src/frontends/qt2/lyx_gui.C 2005-10-19 17:07:36.000000000 +0200 +++ src/frontends/qt2/lyx_gui.C 2005-12-19 07:54:36.000000000 +0100 @@ -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,7 +61,7 @@ using lyx::support::ltrim; using lyx::support::package; - +using lyx::support::Path; using lyx::frontend::QtView; namespace os = lyx::support::os; @@ -221,12 +222,16 @@ initEncodings(); // initial geometry - unsigned int width = 690; - unsigned int height = 510; + //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(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(); @@ -268,6 +273,18 @@ 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;
--- ../lyx-1.4.0/src/lyxrc.h 2005-03-25 16:27:30.000000000 +0100 +++ src/lyxrc.h 2005-12-19 07:55:22.000000000 +0100 @@ -116,6 +116,11 @@ RC_SCREEN_FONT_SIZES, RC_SCREEN_FONT_TYPEWRITER, 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,17 @@ * 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; };