Updating branch refs/heads/xrandr-display-settings to af406f74244decc906a2521e9baa451af6efc738 (commit) from 76f6b7ee19d2761d2ac788ee08da410f9efe84b2 (commit)
commit af406f74244decc906a2521e9baa451af6efc738 Author: Lionel Le Folgoc <mrpo...@gmail.com> Date: Thu Jun 10 21:24:57 2010 +0200 Store the raw output position in xfconf The previous idea (rightof/leftof…) was not that great; storing directly the position is more accurate and less hacky. dialogs/display-settings/xfce-randr.c | 72 ++++----------------------------- dialogs/display-settings/xfce-randr.h | 21 ++-------- 2 files changed, 12 insertions(+), 81 deletions(-) diff --git a/dialogs/display-settings/xfce-randr.c b/dialogs/display-settings/xfce-randr.c index d123a73..c292159 100644 --- a/dialogs/display-settings/xfce-randr.c +++ b/dialogs/display-settings/xfce-randr.c @@ -35,45 +35,6 @@ #ifdef HAS_RANDR_ONE_POINT_TWO -static void -xfce_randr_compute_position (XfceRandr *randr, - gint *pos_x, - gint *pos_y) -{ - gint m, n; - - for (n = 0; n < randr->resources->noutput; ++n) - { - randr->position[n].output = -1; - - if (randr->status[n] == XFCE_OUTPUT_STATUS_NONE || randr->mode[n] == None) - continue; - - for (m = 0; m < randr->resources->noutput; ++m) - { - if (randr->status[m] == XFCE_OUTPUT_STATUS_NONE || m == n - || randr->mode[m] == None) - continue; - - randr->position[n].output = m; - if (pos_x[n] < pos_x[m]) - randr->position[n].option = XFCE_OUTPUT_POSITION_LEFT_OF; - else if (pos_x[n] > pos_x[m]) - randr->position[n].option = XFCE_OUTPUT_POSITION_RIGHT_OF; - else if (pos_y[n] < pos_y[m]) - randr->position[n].option = XFCE_OUTPUT_POSITION_ABOVE; - else if (pos_y[n] > pos_y[m]) - randr->position[n].option = XFCE_OUTPUT_POSITION_BELOW; - else - randr->position[n].option = XFCE_OUTPUT_POSITION_SAME_AS; - - break; - } - } -} - - - XfceRandr * xfce_randr_new (GdkDisplay *display, GError **error) @@ -86,7 +47,6 @@ xfce_randr_new (GdkDisplay *display, XRRCrtcInfo *crtc_info; gint n; gint major, minor; - gint *pos_x, *pos_y; g_return_val_if_fail (GDK_IS_DISPLAY (display), NULL); g_return_val_if_fail (error == NULL || *error == NULL, NULL); @@ -136,10 +96,6 @@ xfce_randr_new (GdkDisplay *display, randr->status = g_new0 (XfceOutputStatus, randr->resources->noutput); randr->output_info = g_new0 (XRROutputInfo *, randr->resources->noutput); - /* keep track of the positions */ - pos_x = g_new0 (gint, randr->resources->noutput); - pos_y = g_new0 (gint, randr->resources->noutput); - /* walk the outputs */ for (n = 0; n < randr->resources->noutput; n++) { @@ -196,8 +152,8 @@ xfce_randr_new (GdkDisplay *display, randr->rotation[n] = crtc_info->rotation; randr->rotations[n] = crtc_info->rotations; XRRFreeCrtcInfo (crtc_info); - pos_x[n] = crtc_info->x; - pos_y[n] = crtc_info->y; + randr->position[n].x = crtc_info->x; + randr->position[n].y = crtc_info->y; continue; } } @@ -209,9 +165,6 @@ xfce_randr_new (GdkDisplay *display, XRRFreeScreenConfigInfo (screen_config); } - /* compute the relative positions of outputs */ - xfce_randr_compute_position (randr, pos_x, pos_y); - return randr; } @@ -288,7 +241,6 @@ xfce_randr_save_device (XfceRandr *randr, const gchar *resolution_name = NULL; gdouble refresh_rate = 0.00; XRRModeInfo *mode; - const gchar *position_option; gint n; gint degrees; @@ -358,21 +310,13 @@ xfce_randr_save_device (XfceRandr *randr, xfconf_channel_reset_property (channel, property, TRUE); /* then save the new one */ if (G_LIKELY (resolution_name != NULL) - && randr->position[output].output >= 0 - && randr->position[output].output < randr->resources->noutput) + && randr->position[output].x >= 0 + && randr->position[output].y >= 0) { - /* convert the position into a string */ - switch (randr->position[output].option) - { - case XFCE_OUTPUT_POSITION_LEFT_OF: position_option = "LeftOf"; break; - case XFCE_OUTPUT_POSITION_RIGHT_OF: position_option = "RightOf"; break; - case XFCE_OUTPUT_POSITION_ABOVE: position_option = "Above"; break; - case XFCE_OUTPUT_POSITION_BELOW: position_option = "Below"; break; - default: position_option = "SameAs"; break; - } - g_snprintf (property, sizeof (property), "/%s/%s/Position/%s", scheme, distinct, position_option); - /* save the position */ - xfconf_channel_set_string (channel, property, randr->output_info[randr->position[output].output]->name); + g_snprintf (property, sizeof (property), "/%s/%s/Position/X", scheme, distinct); + xfconf_channel_set_int (channel, property, randr->position[output].x); + g_snprintf (property, sizeof (property), "/%s/%s/Position/Y", scheme, distinct); + xfconf_channel_set_int (channel, property, randr->position[output].y); } } diff --git a/dialogs/display-settings/xfce-randr.h b/dialogs/display-settings/xfce-randr.h index 37bfb77..214a49c 100644 --- a/dialogs/display-settings/xfce-randr.h +++ b/dialogs/display-settings/xfce-randr.h @@ -29,8 +29,8 @@ #define XFCE_RANDR_ROTATION(randr) (randr->rotation[randr->active_output]) #define XFCE_RANDR_ROTATIONS(randr) (randr->rotations[randr->active_output]) #define XFCE_RANDR_OUTPUT_INFO(randr) (randr->output_info[randr->active_output]) -#define XFCE_RANDR_POSITION_OPTION(randr) (randr->position[randr->active_output].option) -#define XFCE_RANDR_POSITION_OUTPUT(randr) (randr->position[randr->active_output].output) +#define XFCE_RANDR_POS_X(randr) (randr->position[randr->active_output].x) +#define XFCE_RANDR_POS_Y(randr) (randr->position[randr->active_output].y) /* check for randr 1.2 or better */ #if RANDR_MAJOR > 1 || (RANDR_MAJOR == 1 && RANDR_MINOR >= 2) @@ -48,7 +48,6 @@ typedef struct _XfceRandr XfceRandr; typedef struct _XfceOutputPosition XfceOutputPosition; typedef enum _XfceDisplayLayout XfceDisplayLayout; -typedef enum _XfceOutputPositionOption XfceOutputPositionOption; typedef enum _XfceOutputStatus XfceOutputStatus; enum _XfceDisplayLayout @@ -58,15 +57,6 @@ enum _XfceDisplayLayout XFCE_DISPLAY_LAYOUT_EXTEND }; -enum _XfceOutputPositionOption -{ - XFCE_OUTPUT_POSITION_LEFT_OF, - XFCE_OUTPUT_POSITION_RIGHT_OF, - XFCE_OUTPUT_POSITION_ABOVE, - XFCE_OUTPUT_POSITION_BELOW, - XFCE_OUTPUT_POSITION_SAME_AS -}; - enum _XfceOutputStatus { XFCE_OUTPUT_STATUS_NONE, @@ -76,11 +66,8 @@ enum _XfceOutputStatus struct _XfceOutputPosition { - /* option... */ - XfceOutputPositionOption option; - - /* ... relative to the position of */ - gint output; + gint x; + gint y; }; struct _XfceRandr _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org http://foo-projects.org/mailman/listinfo/xfce4-commits