Skip to content

Commit cbaff6a

Browse files
author
telwertowski
committed
Use save/restoreGeometry introduced in Qt4.2 rather than saving width, height, x and y as separate parameters. The new functions support multiple monitors and will restore a window to a visible location if it was saved at a location that is no longer visible. Fix for bug #440.
git-svn-id: http://svn.osgeo.org/qgis/trunk@7696 c8812cc2-4d05-0410-92ff-de0c093fc19c
1 parent f76c0d2 commit cbaff6a

11 files changed

+37
-169
lines changed

src/app/composer/qgscomposer.cpp

+4-35
Original file line numberDiff line numberDiff line change
@@ -917,47 +917,16 @@ void QgsComposer::resizeEvent ( QResizeEvent *e )
917917

918918
void QgsComposer::saveWindowState()
919919
{
920-
#ifdef QGISDEBUG
921-
std::cout << "QgsComposer::saveWindowState" << std::endl;
922-
#endif
923-
924920
QSettings settings;
925-
926-
QPoint p = this->pos();
927-
QSize s = this->size();
928-
929-
settings.writeEntry("/Composer/geometry/x", p.x());
930-
settings.writeEntry("/Composer/geometry/y", p.y());
931-
settings.writeEntry("/Composer/geometry/w", s.width());
932-
settings.writeEntry("/Composer/geometry/h", s.height());
933-
934-
settings.setValue("/Composer/geometry/splitter", mSplitter->saveState());
935-
936-
if(this->isMaximized()){
937-
std::cout << "maximized!" << std::endl;
938-
}
921+
settings.setValue("/Composer/geometry", saveGeometry());
922+
settings.setValue("/Composer/splitterState", mSplitter->saveState());
939923
}
940924

941925
void QgsComposer::restoreWindowState()
942926
{
943-
944927
QSettings settings;
945-
946-
QDesktopWidget *d = QApplication::desktop();
947-
int dw = d->width();
948-
int dh = d->height();
949-
int w = settings.readNumEntry("/Composer/geometry/w", 600);
950-
int h = settings.readNumEntry("/Composer/geometry/h", 400);
951-
int x = settings.readNumEntry("/Composer/geometry/x", (dw - 600) / 2);
952-
int y = settings.readNumEntry("/Composer/geometry/y", (dh - 400) / 2);
953-
resize(w, h);
954-
move(x, y);
955-
956-
//We also need to save the maximized state
957-
958-
//std::cout << "x: " << x << "y: " << y << "w: " << w << "h: " << h << std::endl;
959-
960-
mSplitter->restoreState(settings.value("/Composer/geometry/splitter").toByteArray());
928+
restoreGeometry(settings.value("/Composer/geometry").toByteArray());
929+
mSplitter->restoreState(settings.value("/Composer/splitterState").toByteArray());
961930
}
962931

963932
void QgsComposer::on_helpPButton_clicked()

src/app/qgisapp.cpp

+8-23
Original file line numberDiff line numberDiff line change
@@ -1381,40 +1381,25 @@ void QgisApp::saveWindowState()
13811381
// store window and toolbar positions
13821382
QSettings settings;
13831383
// store the toolbar/dock widget settings using Qt4 settings API
1384-
settings.setValue("/Geometry/state", this->saveState());
1384+
settings.setValue("/UI/state", this->saveState());
13851385

13861386
// store window geometry
1387-
QPoint p = this->pos();
1388-
QSize s = this->size();
1389-
settings.writeEntry("/Geometry/maximized", this->isMaximized());
1390-
settings.writeEntry("/Geometry/x", p.x());
1391-
settings.writeEntry("/Geometry/y", p.y());
1392-
settings.writeEntry("/Geometry/w", s.width());
1393-
settings.writeEntry("/Geometry/h", s.height());
1394-
settings.setValue("/Geometry/canvasSplitterState", canvasLegendSplit->saveState());
1395-
settings.setValue("/Geometry/legendSplitterState", legendOverviewSplit->saveState());
1387+
settings.setValue("/UI/geometry", saveGeometry());
1388+
settings.setValue("/UI/canvasSplitterState", canvasLegendSplit->saveState());
1389+
settings.setValue("/UI/legendSplitterState", legendOverviewSplit->saveState());
13961390
}
13971391

13981392
void QgisApp::restoreWindowState()
13991393
{
14001394
// restore the toolbar and dock widgets postions using Qt4 settings API
14011395
QSettings settings;
1402-
QVariant vstate = settings.value("/Geometry/state");
1396+
QVariant vstate = settings.value("/UI/state");
14031397
this->restoreState(vstate.toByteArray());
14041398

14051399
// restore window geometry
1406-
QDesktopWidget *d = QApplication::desktop();
1407-
int dw = d->width(); // returns desktop width
1408-
int dh = d->height(); // returns desktop height
1409-
int w = settings.readNumEntry("/Geometry/w", 600);
1410-
int h = settings.readNumEntry("/Geometry/h", 400);
1411-
int x = settings.readNumEntry("/Geometry/x", (dw - 600) / 2);
1412-
int y = settings.readNumEntry("/Geometry/y", (dh - 400) / 2);
1413-
resize(w, h);
1414-
move(x, y);
1415-
1416-
canvasLegendSplit->restoreState(settings.value("/Geometry/canvasSplitterState").toByteArray());
1417-
legendOverviewSplit->restoreState(settings.value("/Geometry/legendSplitterState").toByteArray());
1400+
restoreGeometry(settings.value("/UI/geometry").toByteArray());
1401+
canvasLegendSplit->restoreState(settings.value("/UI/canvasSplitterState").toByteArray());
1402+
legendOverviewSplit->restoreState(settings.value("/UI/legendSplitterState").toByteArray());
14181403
}
14191404
///////////// END OF GUI SETUP ROUTINES ///////////////
14201405

src/app/qgsattributedialog.cpp

+2-14
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,7 @@ bool QgsAttributeDialog::queryAttributes(const QgsFieldMap& fields, QgsFeature&
9898
void QgsAttributeDialog::savePositionAndColumnWidth()
9999
{
100100
QSettings settings;
101-
QPoint p = this->pos();
102-
QSize s = this->size();
103-
settings.writeEntry(_settingsPath+"x", p.x());
104-
settings.writeEntry(_settingsPath+"y", p.y());
105-
settings.writeEntry(_settingsPath+"w", s.width());
106-
settings.writeEntry(_settingsPath+"h", s.height());
107-
101+
settings.setValue(_settingsPath+"geometry", saveGeometry());
108102
}
109103

110104
void QgsAttributeDialog::resizeEvent(QResizeEvent *event)
@@ -122,13 +116,7 @@ void QgsAttributeDialog::moveEvent(QMoveEvent *event)
122116
void QgsAttributeDialog::restorePositionAndColumnWidth()
123117
{
124118
QSettings settings;
125-
int ww = settings.readNumEntry(_settingsPath+"w", 281);
126-
int wh = settings.readNumEntry(_settingsPath+"h", 316);
127-
int wx = settings.readNumEntry(_settingsPath+"x", 100);
128-
int wy = settings.readNumEntry(_settingsPath+"y", 100);
129-
130-
resize(ww,wh);
131-
move(wx,wy);
119+
restoreGeometry(settings.value(_settingsPath+"geometry").toByteArray());
132120
}
133121

134122
void QgsAttributeDialog::setAttributeValueChanged(int row, int column)

src/app/qgsidentifyresults.cpp

+3-11
Original file line numberDiff line numberDiff line change
@@ -152,24 +152,16 @@ void QgsIdentifyResults::contextMenuEvent(QContextMenuEvent* event)
152152
// Restore last window position/size and show the window
153153
void QgsIdentifyResults::restorePosition()
154154
{
155-
156155
QSettings settings;
157-
QPoint pos = settings.value("/Windows/Identify/pos",
158-
QPoint(100,100)).toPoint();
159-
QSize size = settings.value("/Windows/Identify/size",
160-
QSize(281,316)).toSize();
161-
//std::cerr << "Setting geometry: " << wx << ", " << wy << ", " << ww << ", " << wh << std::endl;
162-
resize(size);
163-
move(pos);
156+
restoreGeometry(settings.value("/Windows/Identify/geometry").toByteArray());
164157
show();
165-
//std::cerr << "Current geometry: " << x() << ", " << y() << ", " << width() << ", " << height() << std::endl;
166158
}
159+
167160
// Save the current window location (store in ~/.qt/qgisrc)
168161
void QgsIdentifyResults::saveWindowLocation()
169162
{
170163
QSettings settings;
171-
settings.setValue("/Windows/Identify/pos", this->pos());
172-
settings.setValue("/Windows/Identify/size", this->size());
164+
settings.setValue("/Windows/Identify/geometry", saveGeometry());
173165
}
174166

175167
/** add an attribute and its value to the list */

src/app/qgsmeasuredialog.cpp

+8-21
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ void QgsMeasureDialog::addPoint(QgsPoint &point)
144144
void QgsMeasureDialog::close(void)
145145
{
146146
restart();
147-
saveWindowLocation();
148-
hide();
147+
QDialog::close();
149148
}
150149

151150
void QgsMeasureDialog::closeEvent(QCloseEvent *e)
@@ -157,35 +156,23 @@ void QgsMeasureDialog::closeEvent(QCloseEvent *e)
157156
void QgsMeasureDialog::restorePosition()
158157
{
159158
QSettings settings;
160-
int ww = settings.readNumEntry("/Windows/Measure/w", 150);
159+
restoreGeometry(settings.value("/Windows/Measure/geometry").toByteArray());
161160
int wh;
162161
if (mMeasureArea)
163-
wh = settings.readNumEntry("/Windows/Measure/hNoTable", 70);
162+
wh = settings.value("/Windows/Measure/hNoTable", 70).toInt();
164163
else
165-
wh = settings.readNumEntry("/Windows/Measure/h", 200);
166-
int wx = settings.readNumEntry("/Windows/Measure/x", 100);
167-
int wy = settings.readNumEntry("/Windows/Measure/y", 100);
168-
// setUpdatesEnabled(false);
169-
adjustSize();
170-
resize(ww,wh);
171-
move(wx,wy);
172-
// setUpdatesEnabled(true);
164+
wh = settings.value("/Windows/Measure/h", 200).toInt();
165+
resize(width(), wh);
173166
updateUi();
174167
this->show();
175168
}
176169

177170
void QgsMeasureDialog::saveWindowLocation()
178171
{
179172
QSettings settings;
180-
QPoint p = this->pos();
181-
QSize s = this->size();
182-
settings.writeEntry("/Windows/Measure/x", p.x());
183-
settings.writeEntry("/Windows/Measure/y", p.y());
184-
settings.writeEntry("/Windows/Measure/w", s.width());
185-
if (mMeasureArea)
186-
settings.writeEntry("/Windows/Measure/hNoTable", s.height());
187-
else
188-
settings.writeEntry("/Windows/Measure/h", s.height());
173+
settings.setValue("/Windows/Measure/geometry", saveGeometry());
174+
const QString &key = mMeasureArea ? "/Windows/Measure/hNoTable" : "/Windows/Measure/h";
175+
settings.setValue(key, height());
189176
}
190177

191178
void QgsMeasureDialog::on_btnHelp_clicked()

src/plugins/grass/qgsgrassattributes.cpp

+2-15
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,7 @@ void QgsGrassAttributes::restorePosition()
125125
std::cerr << "QgsGrassAttributes::restorePosition()" << std::endl;
126126
#endif
127127
QSettings settings;
128-
int ww = settings.readNumEntry("/GRASS/windows/attributes/w", 250);
129-
int wh = settings.readNumEntry("/GRASS/windows/attributes/h", 350);
130-
int wx = settings.readNumEntry("/GRASS/windows/attributes/x", 100);
131-
int wy = settings.readNumEntry("/GRASS/windows/attributes/y", 100);
132-
#ifdef QGISDEBUG
133-
std::cerr << "wx = " << wx << " wy = " << wy << std::endl;
134-
#endif
135-
resize(ww,wh);
136-
move(wx,wy);
128+
restoreGeometry(settings.value("/GRASS/windows/attributes/geometry").toByteArray());
137129
}
138130

139131
void QgsGrassAttributes::saveWindowLocation()
@@ -142,12 +134,7 @@ void QgsGrassAttributes::saveWindowLocation()
142134
std::cerr << "QgsGrassAttributes::saveWindowLocation()" << std::endl;
143135
#endif
144136
QSettings settings;
145-
QPoint p = this->pos();
146-
QSize s = this->size();
147-
settings.writeEntry("/GRASS/windows/attributes/x", p.x());
148-
settings.writeEntry("/GRASS/windows/attributes/y", p.y());
149-
settings.writeEntry("/GRASS/windows/attributes/w", s.width());
150-
settings.writeEntry("/GRASS/windows/attributes/h", s.height());
137+
settings.setValue("/GRASS/windows/attributes/geometry", saveGeometry());
151138
}
152139

153140
int QgsGrassAttributes::addTab ( const QString & label )

src/plugins/grass/qgsgrassedit.cpp

+2-12
Original file line numberDiff line numberDiff line change
@@ -794,23 +794,13 @@ void QgsGrassEdit::markerSizeChanged()
794794
void QgsGrassEdit::restorePosition()
795795
{
796796
QSettings settings;
797-
int ww = settings.readNumEntry("/GRASS/windows/edit/w", 420);
798-
int wh = settings.readNumEntry("/GRASS/windows/edit/h", 150);
799-
int wx = settings.readNumEntry("/GRASS/windows/edit/x", 100);
800-
int wy = settings.readNumEntry("/GRASS/windows/edit/y", 100);
801-
resize(ww,wh);
802-
move(wx,wy);
797+
restoreGeometry(settings.value("/GRASS/windows/edit/geometry").toByteArray());
803798
}
804799

805800
void QgsGrassEdit::saveWindowLocation()
806801
{
807802
QSettings settings;
808-
QPoint p = this->pos();
809-
QSize s = this->size();
810-
settings.writeEntry("/GRASS/windows/edit/x", p.x());
811-
settings.writeEntry("/GRASS/windows/edit/y", p.y());
812-
settings.writeEntry("/GRASS/windows/edit/w", s.width());
813-
settings.writeEntry("/GRASS/windows/edit/h", s.height());
803+
settings.setValue("/GRASS/windows/edit/geometry", saveGeometry());
814804
}
815805

816806
void QgsGrassEdit::updateSymb ( void )

src/plugins/grass/qgsgrassregion.cpp

+2-12
Original file line numberDiff line numberDiff line change
@@ -480,22 +480,12 @@ void QgsGrassRegion::reject()
480480
void QgsGrassRegion::restorePosition()
481481
{
482482
QSettings settings;
483-
int ww = settings.readNumEntry("/GRASS/windows/region/w", 250);
484-
int wh = settings.readNumEntry("/GRASS/windows/region/h", 350);
485-
int wx = settings.readNumEntry("/GRASS/windows/region/x", 100);
486-
int wy = settings.readNumEntry("/GRASS/windows/region/y", 100);
487-
resize(ww,wh);
488-
move(wx,wy);
483+
restoreGeometry(settings.value("/GRASS/windows/region/geometry").toByteArray());
489484
}
490485

491486
void QgsGrassRegion::saveWindowLocation()
492487
{
493488
QSettings settings;
494-
QPoint p = this->pos();
495-
QSize s = this->size();
496-
settings.writeEntry("/GRASS/windows/region/x", p.x());
497-
settings.writeEntry("/GRASS/windows/region/y", p.y());
498-
settings.writeEntry("/GRASS/windows/region/w", s.width());
499-
settings.writeEntry("/GRASS/windows/region/h", s.height());
489+
settings.setValue("/GRASS/windows/region/geometry", saveGeometry());
500490
}
501491

src/plugins/grass/qgsgrassselect.cpp

+2-12
Original file line numberDiff line numberDiff line change
@@ -109,23 +109,13 @@ void QgsGrassSelect::restorePosition()
109109
adjustSize ();
110110

111111
QSettings settings;
112-
int ww = settings.readNumEntry("/GRASS/windows/select/w", 500);
113-
//int wh = settings.readNumEntry("/GRASS/windows/select/h", 100);
114-
int wx = settings.readNumEntry("/GRASS/windows/select/x", 100);
115-
int wy = settings.readNumEntry("/GRASS/windows/select/y", 100);
116-
resize(ww,height());
117-
move(wx,wy);
112+
restoreGeometry(settings.value("/GRASS/windows/select/geometry").toByteArray());
118113
}
119114

120115
void QgsGrassSelect::saveWindowLocation()
121116
{
122117
QSettings settings;
123-
QPoint p = this->pos();
124-
QSize s = this->size();
125-
settings.writeEntry("/GRASS/windows/select/x", p.x());
126-
settings.writeEntry("/GRASS/windows/select/y", p.y());
127-
settings.writeEntry("/GRASS/windows/select/w", s.width());
128-
settings.writeEntry("/GRASS/windows/select/h", s.height());
118+
settings.setValue("/GRASS/windows/select/geometry", saveGeometry());
129119
}
130120

131121
bool QgsGrassSelect::first = true;

src/plugins/grass/qgsgrasstools.cpp

+2-12
Original file line numberDiff line numberDiff line change
@@ -409,24 +409,14 @@ void QgsGrassTools::closeEvent(QCloseEvent *e)
409409
void QgsGrassTools::restorePosition()
410410
{
411411
QSettings settings;
412-
int ww = settings.readNumEntry("/GRASS/windows/tools/w", 250);
413-
int wh = settings.readNumEntry("/GRASS/windows/tools/h", 300);
414-
int wx = settings.readNumEntry("/GRASS/windows/tools/x", 100);
415-
int wy = settings.readNumEntry("/GRASS/windows/tools/y", 100);
416-
resize(ww,wh);
417-
move(wx,wy);
412+
restoreGeometry(settings.value("/GRASS/windows/tools/geometry").toByteArray());
418413
show();
419414
}
420415

421416
void QgsGrassTools::saveWindowLocation()
422417
{
423418
QSettings settings;
424-
QPoint p = this->pos();
425-
QSize s = this->size();
426-
settings.writeEntry("/GRASS/windows/tools/x", p.x());
427-
settings.writeEntry("/GRASS/windows/tools/y", p.y());
428-
settings.writeEntry("/GRASS/windows/tools/w", s.width());
429-
settings.writeEntry("/GRASS/windows/tools/h", s.height());
419+
settings.setValue("/GRASS/windows/tools/geometry", saveGeometry());
430420
}
431421

432422
void QgsGrassTools::emitRegionChanged()

src/ui/qgsidentifyresultsbase.ui

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<rect>
99
<x>0</x>
1010
<y>0</y>
11-
<width>231</width>
12-
<height>542</height>
11+
<width>281</width>
12+
<height>316</height>
1313
</rect>
1414
</property>
1515
<property name="windowTitle" >

0 commit comments

Comments
 (0)