<URL: http://bugs.freeciv.org/Ticket/Display.html?id=15260 >

Consolidated the above posted patches, ready for commit to trunk and S2_1
disable_reports.diff
end_phase.diff
observer_keys.diff

Changed the observer keys handling a bit: Now the shift-arrow keys to
scroll the mapview work as well, just like center on capital (not when
being global observer, then the message "Oh my, You seem to have no
capital" is generated, which seems harmless.

The logic was also simplified in key handling: return if observer after
having handled shift-key events. Removal of the large else clause caused
a lot of reindenting in the patch, but no changes.


Index: server/srv_main.c
===================================================================
--- server/srv_main.c	(revision 13088)
+++ server/srv_main.c	(arbetskopia)
@@ -759,6 +759,14 @@
 
   freelog(LOG_DEBUG, "Endturn");
 
+  /* Hack: because observer players never get an end-phase packet we send
+   * one here.  It would be better perhaps to have a full end-turn packet. */
+  conn_list_iterate(game.est_connections, pconn) {
+    if (!pconn->player) {
+      send_packet_end_phase(pconn);
+    }
+  } conn_list_iterate_end;
+
   map_calculate_borders();
 
   /* Output some AI measurement information */
Index: client/gui-gtk-2.0/gui_main.c
===================================================================
--- client/gui-gtk-2.0/gui_main.c	(revision 13088)
+++ client/gui-gtk-2.0/gui_main.c	(arbetskopia)
@@ -455,89 +455,93 @@
     return FALSE;
   }
 
-  if (!client_is_observer()) { /* FIXME: is this check right? */
-    if ((ev->state & GDK_SHIFT_MASK)) {
-      switch (ev->keyval) {
-	case GDK_Left:
-	  scroll_mapview(DIR8_WEST);
-	  return TRUE;
 
-	case GDK_Right:
-	  scroll_mapview(DIR8_EAST);
-	  return TRUE;
+  if ((ev->state & GDK_SHIFT_MASK)) {
+    switch (ev->keyval) {
+    case GDK_Left:
+      scroll_mapview(DIR8_WEST);
+      return TRUE;
 
-	case GDK_Up:
-	  scroll_mapview(DIR8_NORTH);
-	  return TRUE;
+    case GDK_Right:
+      scroll_mapview(DIR8_EAST);
+      return TRUE;
 
-	case GDK_Down:
-	  scroll_mapview(DIR8_SOUTH);
-	  return TRUE;
+    case GDK_Up:
+      scroll_mapview(DIR8_NORTH);
+      return TRUE;
 
-	case GDK_Home:
-	  key_center_capital();
-	  return TRUE;
+    case GDK_Down:
+      scroll_mapview(DIR8_SOUTH);
+      return TRUE;
 
-	case GDK_Return:
-	case GDK_KP_Enter:
-	  key_end_turn();
-	  return TRUE;
+    case GDK_Home:
+      key_center_capital();
+      return TRUE;
 
-        case GDK_Page_Up:
-          g_signal_emit_by_name(main_message_area, "move_cursor",
-			  GTK_MOVEMENT_PAGES, -1, FALSE);
-          return TRUE;
+    case GDK_Return:
+    case GDK_KP_Enter:
+      key_end_turn();
+      return TRUE;
 
-        case GDK_Page_Down:
-          g_signal_emit_by_name(main_message_area, "move_cursor",
-			  GTK_MOVEMENT_PAGES, 1, FALSE);
-          return TRUE;
-  
-	default:
-	  break;
-      }
+    case GDK_Page_Up:
+      g_signal_emit_by_name(main_message_area, "move_cursor",
+	                          GTK_MOVEMENT_PAGES, -1, FALSE);
+      return TRUE;
+
+    case GDK_Page_Down:
+      g_signal_emit_by_name(main_message_area, "move_cursor",
+	                          GTK_MOVEMENT_PAGES, 1, FALSE);
+      return TRUE;
+
+    default:
+      break;
     }
+  }
+  /* Return here if observer */
+  if (client_is_observer()) {
+    return FALSE;
+  }
 
-    if (GTK_WIDGET_HAS_FOCUS(map_canvas)) {
-      switch (ev->keyval) {
-        case GDK_Up:
-          key_unit_move(DIR8_NORTH);
-          return TRUE;
+  if (GTK_WIDGET_HAS_FOCUS(map_canvas)) {
+    switch (ev->keyval) {
+    case GDK_Up:
+      key_unit_move(DIR8_NORTH);
+      return TRUE;
 
-        case GDK_Page_Up:
-          key_unit_move(DIR8_NORTHEAST);
-          return TRUE;
+    case GDK_Page_Up:
+      key_unit_move(DIR8_NORTHEAST);
+      return TRUE;
 
-        case GDK_Right:
-          key_unit_move(DIR8_EAST);
-          return TRUE;
+    case GDK_Right:
+      key_unit_move(DIR8_EAST);
+      return TRUE;
 
-        case GDK_Page_Down:
-          key_unit_move(DIR8_SOUTHEAST);
-          return TRUE;
+    case GDK_Page_Down:
+      key_unit_move(DIR8_SOUTHEAST);
+      return TRUE;
 
-        case GDK_Down:
-          key_unit_move(DIR8_SOUTH);
-          return TRUE;
+    case GDK_Down:
+      key_unit_move(DIR8_SOUTH);
+      return TRUE;
 
-        case GDK_End:
-          key_unit_move(DIR8_SOUTHWEST);
-          return TRUE;
-      
-        case GDK_Left:
-          key_unit_move(DIR8_WEST);
-          return TRUE;
+    case GDK_End:
+      key_unit_move(DIR8_SOUTHWEST);
+      return TRUE;
+  
+    case GDK_Left:
+      key_unit_move(DIR8_WEST);
+      return TRUE;
 
-        case GDK_Home:		
-          key_unit_move(DIR8_NORTHWEST);
-	  return TRUE;
+    case GDK_Home:		
+      key_unit_move(DIR8_NORTHWEST);
+      return TRUE;
 
-	default:
-	  break;
-      }
+    default:
+      break;
     }
+  }
 
-    assert(MAX_NUM_BATTLEGROUPS == 4);
+  assert(MAX_NUM_BATTLEGROUPS == 4);
 #define BATTLEGROUP_CASE(num)						    \
   if (ev->state & GDK_CONTROL_MASK) {					    \
     key_unit_assign_battlegroup((num), (ev->state & GDK_SHIFT_MASK) != 0);  \
@@ -550,113 +554,112 @@
   } else {								    \
     key_unit_select_battlegroup((num), TRUE);				    \
   }
-    
-    switch (ev->keyval) {
-    case GDK_1:
-      BATTLEGROUP_CASE(0);
-      break;
+  
+  switch (ev->keyval) {
+  case GDK_1:
+    BATTLEGROUP_CASE(0);
+    break;
 
-    case GDK_2:
-      BATTLEGROUP_CASE(1);
-      break;
+  case GDK_2:
+    BATTLEGROUP_CASE(1);
+    break;
 
-    case GDK_3:
-      BATTLEGROUP_CASE(2);
-      break;
+  case GDK_3:
+    BATTLEGROUP_CASE(2);
+    break;
 
-    case GDK_4:
-      BATTLEGROUP_CASE(3);
-      break;
+  case GDK_4:
+    BATTLEGROUP_CASE(3);
+    break;
 
-    case GDK_exclam:
-      /* Shift + 1 */
-      BATTLEGROUP_SHIFT_CASE(0);
-      break;
+  case GDK_exclam:
+    /* Shift + 1 */
+    BATTLEGROUP_SHIFT_CASE(0);
+    break;
 
-    case GDK_at:
-      /* Shift + 2 */
-      BATTLEGROUP_SHIFT_CASE(1);
-      break;
+  case GDK_at:
+    /* Shift + 2 */
+    BATTLEGROUP_SHIFT_CASE(1);
+    break;
 
-    case GDK_numbersign:
-      /* Shift + 3 */
-      BATTLEGROUP_SHIFT_CASE(2);
-      break;
+  case GDK_numbersign:
+    /* Shift + 3 */
+    BATTLEGROUP_SHIFT_CASE(2);
+    break;
 
-    case GDK_dollar:
-      /* Shift + 4 */
-      BATTLEGROUP_SHIFT_CASE(3);
-      break;
+  case GDK_dollar:
+    /* Shift + 4 */
+    BATTLEGROUP_SHIFT_CASE(3);
+    break;
 
-      case GDK_KP_Up:
-      case GDK_8:
-      case GDK_KP_8:
-	key_unit_move(DIR8_NORTH);
-	break;
+  case GDK_KP_Up:
+  case GDK_8:
+  case GDK_KP_8:
+    key_unit_move(DIR8_NORTH);
+    break;
 
-      case GDK_KP_Page_Up:
-      case GDK_9:
-      case GDK_KP_9:
-	key_unit_move(DIR8_NORTHEAST);
-	break;
+  case GDK_KP_Page_Up:
+  case GDK_9:
+  case GDK_KP_9:
+    key_unit_move(DIR8_NORTHEAST);
+    break;
 
-      case GDK_KP_Right:
-      case GDK_6:
-      case GDK_KP_6:
-	key_unit_move(DIR8_EAST);
-	break;
+  case GDK_KP_Right:
+  case GDK_6:
+  case GDK_KP_6:
+    key_unit_move(DIR8_EAST);
+    break;
 
-      case GDK_KP_Page_Down:
-      case GDK_KP_3:
-	key_unit_move(DIR8_SOUTHEAST);
-	break;
+  case GDK_KP_Page_Down:
+  case GDK_KP_3:
+    key_unit_move(DIR8_SOUTHEAST);
+    break;
 
-      case GDK_KP_Down:
-      case GDK_KP_2:
-	key_unit_move(DIR8_SOUTH);
-	break;
+  case GDK_KP_Down:
+  case GDK_KP_2:
+    key_unit_move(DIR8_SOUTH);
+    break;
 
-      case GDK_KP_End:
-      case GDK_KP_1:
-	key_unit_move(DIR8_SOUTHWEST);
-	break;
+  case GDK_KP_End:
+  case GDK_KP_1:
+    key_unit_move(DIR8_SOUTHWEST);
+    break;
 
-      case GDK_KP_Left:
-      case GDK_KP_4:
-	key_unit_move(DIR8_WEST);
-	break;
+  case GDK_KP_Left:
+  case GDK_KP_4:
+    key_unit_move(DIR8_WEST);
+    break;
 
-      case GDK_KP_Home:		
-      case GDK_7:
-      case GDK_KP_7:
-	key_unit_move(DIR8_NORTHWEST);
-	break;
+  case GDK_KP_Home:		
+  case GDK_7:
+  case GDK_KP_7:
+    key_unit_move(DIR8_NORTHWEST);
+    break;
 
-      case GDK_5:
-      case GDK_KP_5: 
-      case GDK_KP_Begin:
-        key_recall_previous_focus_unit(); 
-        break;
-  
-      case GDK_Escape:
-        key_cancel_action();
-        break;
-  
-      case GDK_t:
-        key_city_workers(w, ev);
-        break;
+  case GDK_5:
+  case GDK_KP_5: 
+  case GDK_KP_Begin:
+    key_recall_previous_focus_unit(); 
+    break;
 
-      case GDK_KP_Divide:
-        key_quickselect(SELECT_SEA);
-        break;
+  case GDK_Escape:
+    key_cancel_action();
+    break;
 
-      case GDK_KP_Multiply:
-        key_quickselect(SELECT_LAND);
-        break;
+  case GDK_t:
+    key_city_workers(w, ev);
+    break;
 
-      default:
-        return FALSE;
-    }
+  case GDK_KP_Divide:
+    key_quickselect(SELECT_SEA);
+    break;
+
+  case GDK_KP_Multiply:
+    key_quickselect(SELECT_LAND);
+    break;
+
+  default:
+    return FALSE;
   }
   return TRUE;
 }
Index: client/gui-gtk-2.0/menu.c
===================================================================
--- client/gui-gtk-2.0/menu.c	(revision 13088)
+++ client/gui-gtk-2.0/menu.c	(arbetskopia)
@@ -1318,6 +1318,13 @@
     menus_set_sensitive("<main>/_Government/_Change Government",
 			can_client_issue_orders());
 
+    /* If the client is not attached to a player these reports are
+     * disabled. */
+    menus_set_sensitive("<main>/_Reports/_Cities", game.player_ptr);
+    menus_set_sensitive("<main>/_Reports/_Units", game.player_ptr);
+    menus_set_sensitive("<main>/_Reports/_Economy", game.player_ptr);
+    menus_set_sensitive("<main>/_Reports/_Science", game.player_ptr);
+    menus_set_sensitive("<main>/_Reports/_Demographics", game.player_ptr);
     menus_set_sensitive("<main>/_Reports/S_paceship",
 			(game.player_ptr
 			 && game.player_ptr->spaceship.state != SSHIP_NONE));
_______________________________________________
Freeciv-dev mailing list
Freeciv-dev@gna.org
https://mail.gna.org/listinfo/freeciv-dev

Reply via email to