summaryrefslogtreecommitdiff
Side-by-side diff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--core/applets/screenshotapplet/screenshot.cpp22
1 files changed, 19 insertions, 3 deletions
diff --git a/core/applets/screenshotapplet/screenshot.cpp b/core/applets/screenshotapplet/screenshot.cpp
index 2af860a..f2cc2c5 100644
--- a/core/applets/screenshotapplet/screenshot.cpp
+++ b/core/applets/screenshotapplet/screenshot.cpp
@@ -484,23 +484,39 @@ ScreenshotApplet::ScreenshotApplet( QWidget *parent, const char *name )
img = img.smoothScale(AppLnk::smallIconSize(), AppLnk::smallIconSize());
m_icon.convertFromImage(img);
}
ScreenshotApplet::~ScreenshotApplet()
{
}
void ScreenshotApplet::mousePressEvent( QMouseEvent *)
{
ScreenshotControl *sc = new ScreenshotControl ( );
QPoint curPos = mapToGlobal ( QPoint ( 0, 0 ));
- sc-> move ( curPos. x ( ) - ( sc-> sizeHint ( ). width ( ) - width ( )) / 2,
- curPos. y ( ) - sc-> sizeHint ( ). height ( ));
- sc-> show ( );
+
+ // windowPosX is the windows position centered above the applets icon.
+ // If the icon is near the edge of the screen, the window would leave the visible area
+ // so we check the position against the screen width and correct the difference if needed
+
+ int screenWidth = qApp->desktop()->width();
+ int windowPosX = curPos. x ( ) - ( sc-> sizeHint ( ). width ( ) - width ( )) / 2 ;
+ int ZwindowPosX, XwindowPosX;
+
+ // the window would be placed beyond the screen wich doesn't look tooo good
+ if ( (windowPosX + sc-> sizeHint ( ). width ( )) > screenWidth ) {
+ XwindowPosX = windowPosX + sc-> sizeHint ( ). width ( ) - screenWidth;
+ ZwindowPosX = windowPosX - XwindowPosX - 1;
+ } else {
+ ZwindowPosX = windowPosX;
+ }
+
+ sc-> move ( ZwindowPosX, curPos. y ( ) - sc-> sizeHint ( ). height ( ) );
+ sc-> show ( );
}
void ScreenshotApplet::paintEvent( QPaintEvent* )
{
QPainter p ( this );
p.drawPixmap( 0,0, m_icon );
}