[Xfce4-commits] <xfwm4:libxfce4ui> Compute screen size based on each monitor size and layout and avoid using reported size (bug #5795)
Olivier Fourdan
noreply at xfce.org
Sun Jan 10 10:24:29 CET 2010
Updating branch refs/heads/libxfce4ui
to ba38bf2c5240a5663a47827b3a516c3bd9ddab91 (commit)
from c4f0fdf689601169fc9bd75e422b2351d6539a6c (commit)
commit ba38bf2c5240a5663a47827b3a516c3bd9ddab91
Author: Olivier Fourdan <fourdan at xfce.org>
Date: Sun Oct 11 11:22:07 2009 +0200
Compute screen size based on each monitor size and layout and avoid using reported size (bug #5795)
src/events.c | 12 ++----------
src/screen.c | 39 ++++++++++++++++++++++++++++++++++++++-
src/screen.h | 1 +
3 files changed, 41 insertions(+), 11 deletions(-)
diff --git a/src/events.c b/src/events.c
index f0148f7..b4e860b 100644
--- a/src/events.c
+++ b/src/events.c
@@ -2716,7 +2716,6 @@ size_changed_cb(GdkScreen *gscreen, gpointer data)
{
ScreenInfo *screen_info;
DisplayInfo *display_info;
- int new_width, new_height;
TRACE ("entering size_changed_cb");
@@ -2738,21 +2737,14 @@ size_changed_cb(GdkScreen *gscreen, gpointer data)
* If the overall size of the screen hasn't changed,
* there is no need to continue any further...
*/
- new_width = WidthOfScreen (screen_info->xscreen);
- new_height = HeightOfScreen (screen_info->xscreen);
-
- if ((screen_info->width == new_width) &&
- (screen_info->height == new_height))
+ if (!myScreenComputeSize (screen_info))
{
return;
}
-
display_info = screen_info->display_info;
- screen_info->width = new_width;
- screen_info->height = new_height;
setNetWorkarea (display_info, screen_info->xroot, screen_info->workspace_count,
- new_width, new_height, screen_info->margins);
+ screen_info->width, screen_info->height, screen_info->margins);
placeSidewalks (screen_info, screen_info->params->wrap_workspaces);
clientScreenResize (screen_info);
compositorUpdateScreenSize (screen_info);
diff --git a/src/screen.c b/src/screen.c
index e7b8a2a..2d39a77 100644
--- a/src/screen.c
+++ b/src/screen.c
@@ -531,6 +531,8 @@ myScreenGetKeyPressed (ScreenInfo *screen_info, XKeyEvent * ev)
{
int key, state;
+ TRACE ("entering myScreenGetKeyPressed");
+
state = ev->state & MODIFIER_MASK;
for (key = 0; key < KEY_COUNT; key++)
{
@@ -566,10 +568,42 @@ myScreenGetClientFromWindow (ScreenInfo *screen_info, Window w, unsigned short m
return NULL;
}
+gboolean
+myScreenComputeSize (ScreenInfo *screen_info)
+{
+ gint num_monitors, i;
+ gint width, height;
+ GdkRectangle monitor;
+ gboolean changed;
+
+ g_return_val_if_fail (screen_info != NULL, FALSE);
+ g_return_val_if_fail (GDK_IS_SCREEN (screen_info->gscr), FALSE);
+ TRACE ("entering myScreenComputeSize");
+
+ width = 0;
+ height = 0;
+ num_monitors = gdk_screen_get_n_monitors (screen_info->gscr);
+
+ for (i = 0; i < num_monitors; i++)
+ {
+ gdk_screen_get_monitor_geometry (screen_info->gscr, i, &monitor);
+ width = MAX (monitor.x + monitor.width, width);
+ height = MAX (monitor.y + monitor.height, height);
+ }
+
+ changed = ((screen_info->width != width) | (screen_info->height != height));
+ screen_info->width = width;
+ screen_info->height != height;
+ TRACE ("myScreenComputeSize(): width=%i, height=%i", width, height);
+
+ return changed;
+}
+
void
myScreenInvalidateMonitorCache (ScreenInfo *screen_info)
{
g_return_if_fail (screen_info != NULL);
+ TRACE ("entering myScreenInvalidateMonitorCache");
screen_info->cache_monitor.x = G_MAXINT;
screen_info->cache_monitor.y = G_MAXINT;
@@ -591,6 +625,7 @@ myScreenFindMonitorAtPoint (ScreenInfo *screen_info, gint x, gint y, GdkRectangl
g_return_if_fail (screen_info != NULL);
g_return_if_fail (rect != NULL);
g_return_if_fail (GDK_IS_SCREEN (screen_info->gscr));
+ TRACE ("entering myScreenFindMonitorAtPoint");
/* Cache system */
if ((x >= screen_info->cache_monitor.x) && (x < screen_info->cache_monitor.x + screen_info->cache_monitor.width) &&
@@ -643,6 +678,9 @@ myScreenUpdateFontHeight (ScreenInfo *screen_info)
PangoLanguage *language;
GtkWidget *widget;
+ g_return_val_if_fail (screen_info != NULL, FALSE);
+ TRACE ("entering myScreenUpdateFontHeight");
+
widget = myScreenGetGtkWidget (screen_info);
context = getUIPangoContext (widget);
desc = getUIPangoFontDesc (widget);
@@ -660,5 +698,4 @@ myScreenUpdateFontHeight (ScreenInfo *screen_info)
}
return FALSE;
-
}
diff --git a/src/screen.h b/src/screen.h
index 8c4b0ac..894e96c 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -212,6 +212,7 @@ int myScreenGetKeyPressed (ScreenInfo *,
Client *myScreenGetClientFromWindow (ScreenInfo *,
Window,
unsigned short);
+gboolean myScreenComputeSize (ScreenInfo *);
void myScreenInvalidateMonitorCache (ScreenInfo *);
void myScreenFindMonitorAtPoint (ScreenInfo *,
gint,
More information about the Xfce4-commits
mailing list