Well, I was bored and this has bugged me a few times, so here's the fix:

--- src/grandr.c.orig   2006-04-13 01:39:52.000000000 +0200
+++ src/grandr.c        2006-04-13 01:46:19.000000000 +0200
@@ -253,7 +253,7 @@

       while (cur != NULL)
        {
-         if ((1 << grandr->xr_current_rotation) == ((Rotation) 
gtk_object_get_data(GTK_OBJECT(cur->data), "rotation_value") & 0xf ))
+         if ((grandr->xr_current_rotation >> (Rotation) 
gtk_object_get_data(GTK_OBJECT(cur->data), "rotation_value")) & 1)
            gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (cur->data),
                                            TRUE);
          cur = g_slist_next(cur);

It really is obvious, as "rotation_value" is an int between 0 and 3.

I'm attaching a fuller diff that maintains prettier order between the
menu entries. The above is the bug fixer, though.

/Mikael

mån 2005-09-19 klockan 09:26 +0200 skrev Sven Luther:
> On Mon, Sep 19, 2005 at 09:07:27AM +0200, Mikael Nilsson wrote:
> > Package: gnome-randr-applet
> > Version: 0.2-1
> > Severity: important
> > 
> > 
> > When I've just started Xorg and gnome (on my Dell inspiron 8200 laptop using
> > an nvidia GeForce4 440 Go and nvidia drivers 7667), and check the options in
> > the gnome-randr-applet menu, I get a menu with a lot of resolution options
> > (same as xrandr), and a list of four rotations (same set as xrandr).
> 
> Oh fun, i never saw gnome-randr work with anything but resolution changes, as
> xfree86 was not supporting rotations. Will have to have a look, don't have
> time for the next week or so though.
> 
> > However, the selected rotation is "Inverted", which is incorrect. This is 
> > the output from
> > xrandr:
> > 
> > [EMAIL PROTECTED]:~$ xrandr
> >  SZ:    Pixels          Physical       Refresh
> > *0   1600 x 1200   ( 323mm x 242mm )  *60
> >  1   1280 x 1024   ( 323mm x 242mm )   60
> >  2   1024 x 768    ( 323mm x 242mm )   60
> >  3    800 x 600    ( 323mm x 242mm )   60   56
> >  4    640 x 480    ( 323mm x 242mm )   60
> >  5   1400 x 1050   ( 323mm x 242mm )   60
> >  6   1440 x 900    ( 323mm x 242mm )   60
> >  7   1280 x 960    ( 323mm x 242mm )   60
> >  8   1280 x 800    ( 323mm x 242mm )   60
> >  9   1280 x 768    ( 323mm x 242mm )   60
> >  10   960 x 600    ( 323mm x 242mm )   60
> >  11   840 x 525    ( 323mm x 242mm )   60
> >  12   700 x 525    ( 323mm x 242mm )   60
> >  13   640 x 512    ( 323mm x 242mm )   60
> >  14   720 x 450    ( 323mm x 242mm )   60
> >  15   640 x 400    ( 323mm x 242mm )   60
> >  16   640 x 384    ( 323mm x 242mm )   60
> >  17   512 x 384    ( 323mm x 242mm )   60
> >  18   400 x 300    ( 323mm x 242mm )   60   56
> >  19   320 x 240    ( 323mm x 242mm )   60
> > Current rotation - normal
> > Current reflection - none
> > Rotations possible - normal left inverted right
> > Reflections possible - none
> > [EMAIL PROTECTED]:~$
> > 
> > 
> > The end result is that if I choose another resolution (for doing
> > presentation on external projector), grandr also sets the rotation to
> > inverted... Imagine me standing in front of a crowd full of expectations,
> > only to see my screen upside down ("Oh, well, I'm using Linux" :-).
> > 
> > Anyway, I hope there is a simple fix.
> 
> Probably, maybe we should ping upstream even.
> 
> Friendly,
> 
> Sven Luther
> 
-- 
Plus ça change, plus c'est la même chose
--- src/grandr.c.orig	2006-04-13 01:39:52.000000000 +0200
+++ src/grandr.c	2006-04-13 01:46:19.000000000 +0200
@@ -253,7 +253,7 @@
 
       while (cur != NULL)
 	{
-	  if ((1 << grandr->xr_current_rotation) == ((Rotation) gtk_object_get_data(GTK_OBJECT(cur->data), "rotation_value") & 0xf ))
+	  if ((grandr->xr_current_rotation >> (Rotation) gtk_object_get_data(GTK_OBJECT(cur->data), "rotation_value")) & 1)
 	    gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (cur->data), 
 					    TRUE);
 	  cur = g_slist_next(cur);
@@ -314,37 +314,10 @@
 
   grandr->xr_lock_updates = TRUE;
 
-  /* Size menu entries */
-
-  for (i = 0; i < grandr->xr_nsize; i++)
-    {
-      g_snprintf(tmp_buf, 128, "%5d x %-5d", 
-		 grandr->xr_sizes[i].width, grandr->xr_sizes[i].height );
-      menu_item = gtk_radio_menu_item_new_with_label (group, tmp_buf);
-      group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
-
-      if (i == grandr->xr_current_size)
-	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
-
-      gtk_object_set_data(GTK_OBJECT (menu_item), "size_index", (gpointer)i );
-
-      g_signal_connect (menu_item, "activate",
-			G_CALLBACK (menu_size_selected_cb), grandr );
-
-      gtk_menu_shell_append (GTK_MENU_SHELL (grandr->menu), menu_item);
-
-      grandr->size_menu_items = g_slist_append (grandr->size_menu_items, (gpointer)menu_item );
-
-      gtk_widget_show (menu_item);
-    }
-
   /* Rotation menu entrys */
   
   if (grandr->xr_rotations > 1)
     {
-      menu_item = gtk_separator_menu_item_new  ();
-      gtk_menu_shell_prepend (GTK_MENU_SHELL(grandr->menu), menu_item);
-      gtk_widget_show (menu_item);
 
       for (i = 0; i < 4; i ++) 
 	{
@@ -357,14 +330,14 @@
 	      gtk_object_set_data(GTK_OBJECT (menu_item), "rotation_value", 
 				  (gpointer)i /*(grandr->xr_rotations >> i)*/ );
 
-	      if ((1 << i) == grandr->xr_current_rotation & 0xf)
+	      if ((grandr->xr_current_rotation >> i ) & 1)
 		gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
 
 	      g_signal_connect (menu_item, "activate",
 				G_CALLBACK (menu_rotation_selected_cb), 
 				grandr );
 
-	      gtk_menu_shell_prepend (GTK_MENU_SHELL(grandr->menu),
+	      gtk_menu_shell_append (GTK_MENU_SHELL(grandr->menu),
 				     menu_item);
 
 	      grandr->rotate_menu_items = g_slist_append (grandr->rotate_menu_items, (gpointer)menu_item );
@@ -372,8 +345,37 @@
 	      gtk_widget_show (menu_item);
 	    }
 	}
+      menu_item = gtk_separator_menu_item_new  ();
+      gtk_menu_shell_append (GTK_MENU_SHELL(grandr->menu), menu_item);
+      gtk_widget_show (menu_item);
+
     }
 
+  /* Size menu entries */
+
+  for (i = 0; i < grandr->xr_nsize; i++)
+    {
+      g_snprintf(tmp_buf, 128, "%5d x %-5d", 
+		 grandr->xr_sizes[i].width, grandr->xr_sizes[i].height );
+      menu_item = gtk_radio_menu_item_new_with_label (group, tmp_buf);
+      group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (menu_item));
+
+      if (i == grandr->xr_current_size)
+	gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), TRUE);
+
+      gtk_object_set_data(GTK_OBJECT (menu_item), "size_index", (gpointer)i );
+
+      g_signal_connect (menu_item, "activate",
+			G_CALLBACK (menu_size_selected_cb), grandr );
+
+      gtk_menu_shell_append (GTK_MENU_SHELL (grandr->menu), menu_item);
+
+      grandr->size_menu_items = g_slist_append (grandr->size_menu_items, (gpointer)menu_item );
+
+      gtk_widget_show (menu_item);
+    }
+
+
   gtk_widget_show (grandr->menu);
 
   grandr->xr_lock_updates = FALSE;

Reply via email to