Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 182924
Collapse All | Expand All

(-)xqf-1.0.5/src/filter.c (-22 / +235 lines)
Lines 52-58 Link Here
52
static int last_row_right_list = 0;
52
static int last_row_right_list = 0;
53
static int last_row_country_list = 0;
53
static int last_row_country_list = 0;
54
#endif
54
#endif
55
55
static void svars_select_button_pressed();
56
static void svars_clear_list(GtkWidget * widget, gpointer data);
56
static void server_filter_vars_free(struct server_filter_vars* v);
57
static void server_filter_vars_free(struct server_filter_vars* v);
57
58
58
static int server_pass_filter (struct server *s);
59
static int server_pass_filter (struct server *s);
Lines 157-162 Link Here
157
static  GtkWidget *version_contains_entry;
158
static  GtkWidget *version_contains_entry;
158
static  GtkWidget *map_contains_entry;
159
static  GtkWidget *map_contains_entry;
159
static  GtkWidget *server_name_contains_entry;
160
static  GtkWidget *server_name_contains_entry;
161
static  GtkWidget *at_least_that_num_spinner;
160
#ifdef USE_GEOIP
162
#ifdef USE_GEOIP
161
static GtkWidget *country_left_list;
163
static GtkWidget *country_left_list;
162
static GtkWidget *country_right_list;
164
static GtkWidget *country_right_list;
Lines 166-171 Link Here
166
static GtkWidget *country_clear_button;
168
static GtkWidget *country_clear_button;
167
static GtkWidget *country_show_all_check_button;
169
static GtkWidget *country_show_all_check_button;
168
#endif
170
#endif
171
static GtkWidget *scrolledwindow_fsvars;
172
static GtkWidget *svars_filter_list;
173
static GtkWidget *svars_selection_button;
174
static GtkWidget *svars_clear_button;
175
176
169
177
170
static struct server_filter_vars* server_filter_vars_new()
178
static struct server_filter_vars* server_filter_vars_new()
171
{
179
{
Lines 183-193 Link Here
183
    f->version_contains = NULL;
191
    f->version_contains = NULL;
184
    f->game_type = NULL;
192
    f->game_type = NULL;
185
    f->map_contains = NULL;
193
    f->map_contains = NULL;
186
    f->server_name_contains=NULL;
194
    f->server_name_contains = NULL;
195
    f->at_least_that_num = 0;
187
#ifdef USE_GEOIP
196
#ifdef USE_GEOIP
188
    f->countries = g_array_new (FALSE, FALSE, sizeof (int));
197
    f->countries = g_array_new (FALSE, FALSE, sizeof (int));
189
#endif
198
#endif
190
199
    f->svars = NULL;
191
    return f;
200
    return f;
192
}
201
}
193
202
Lines 205-210 Link Here
205
  g_array_free(v->countries,TRUE);
214
  g_array_free(v->countries,TRUE);
206
  v->countries=NULL;
215
  v->countries=NULL;
207
#endif
216
#endif
217
  g_strfreev(v->svars);
218
  v->svars = NULL;
208
}
219
}
209
220
210
// deep copy of server_filter_vars
221
// deep copy of server_filter_vars
Lines 230-235 Link Here
230
  f->game_type          	= g_strdup(v->game_type);
241
  f->game_type          	= g_strdup(v->game_type);
231
  f->map_contains       	= g_strdup(v->map_contains);
242
  f->map_contains       	= g_strdup(v->map_contains);
232
  f->server_name_contains       = g_strdup(v->server_name_contains);
243
  f->server_name_contains       = g_strdup(v->server_name_contains);
244
  f->at_least_that_num          = v->at_least_that_num;
233
#ifdef USE_GEOIP
245
#ifdef USE_GEOIP
234
246
235
  //FIXME reserve space first, then insert
247
  //FIXME reserve space first, then insert
Lines 237-243 Link Here
237
    g_array_append_val (f->countries,g_array_index(v->countries,int,i));
249
    g_array_append_val (f->countries,g_array_index(v->countries,int,i));
238
 
250
 
239
#endif
251
#endif
240
252
    //g_strdupv from glib2 for compatibility with glib1 compiles (in utils.c)
253
    f->svars = g_strdupv2(v->svars);
241
  return f;
254
  return f;
242
}
255
}
243
256
Lines 259-271 Link Here
259
  printf("  game type: %s\n",f->game_type);
272
  printf("  game type: %s\n",f->game_type);
260
  printf("  map: %s\n",f->map_contains);
273
  printf("  map: %s\n",f->map_contains);
261
  printf("  server name: %s\n",f->server_name_contains);
274
  printf("  server name: %s\n",f->server_name_contains);
275
  printf("  players at least: %d\n",f->at_least_that_num);
262
#ifdef USE_GEOIP
276
#ifdef USE_GEOIP
263
  
277
  
264
  for (i =0; i< f->countries->len;i++)
278
  for (i =0; i< f->countries->len;i++)
265
  	printf("country id: %d ",g_array_index(f->countries,int,i));
279
  	printf("  country id %d: %d \n", i + 1, g_array_index(f->countries,int,i));
266
  printf("\n");
280
  //printf("\n");
267
    
281
    
268
#endif
282
#endif
283
  for (i = 0; f->svars && f->svars[i]; i++)
284
    printf("  custom svar %d: %s \n", i + 1, f->svars[i]);
285
    
286
  printf("\n");
287
269
}
288
}
270
289
271
void apply_filters (unsigned mask, struct server *s) {
290
void apply_filters (unsigned mask, struct server *s) {
Lines 381-387 Link Here
381
    else if(!lowcasestrstr(s->game,filter->game_contains))
400
    else if(!lowcasestrstr(s->game,filter->game_contains))
382
      return FALSE;
401
      return FALSE;
383
  }
402
  }
384
403
  
385
  if( filter->game_type && *filter->game_type )
404
  if( filter->game_type && *filter->game_type )
386
  {
405
  {
387
    if( !s->gametype )
406
    if( !s->gametype )
Lines 434-439 Link Here
434
453
435
#endif
454
#endif
436
455
456
457
  /* Custom server info variables. Trying to satisfy all lines and
458
     comma separated values on each line. */
459
  if (filter->svars != NULL ) {
460
    int i,y;
461
    char **tmp;
462
    char **tmp2;
463
    gboolean not_even_here;
464
    gboolean line_did_not_match; 
465
      for (i = 0; filter->svars && filter->svars[i]; ++i) {
466
	//for each filtered var check if at least having it, reset the bools.
467
	not_even_here = TRUE;
468
	line_did_not_match = TRUE;
469
	for (info_ptr = s->info; info_ptr && *info_ptr; info_ptr += 2) {
470
	  tmp = g_strsplit(filter->svars[i], " = ", 2);
471
	  if (!g_ascii_strcasecmp(*info_ptr, tmp[0])) {
472
	    //at least I have the var
473
	    not_even_here = FALSE;
474
	    //check comma separated values
475
	    tmp2 = g_strsplit(tmp[1], ",", 0);
476
	    for (y = 0; tmp2[y]; y++) {
477
              g_strstrip(tmp2[y]);
478
	      if (!g_ascii_strcasecmp(info_ptr[1], tmp2[y])) {
479
	      //matched one of the comma separated values
480
              line_did_not_match = FALSE;
481
	      }
482
	    }
483
	    if (line_did_not_match) {
484
	      g_strfreev(tmp2);
485
	      g_strfreev(tmp);
486
	      return FALSE;
487
	    }
488
	  g_strfreev(tmp2);
489
	  }
490
	g_strfreev(tmp);
491
        }
492
        if (not_even_here)
493
          return FALSE;
494
      }
495
    }
496
497
  //At least that number of players
498
  if(players < filter->at_least_that_num)
499
    return FALSE;
500
437
  if( filter->server_name_contains && *filter->server_name_contains )
501
  if( filter->server_name_contains && *filter->server_name_contains )
438
  {
502
  {
439
    if( !s->name )
503
    if( !s->name )
Lines 454-462 Link Here
454
  int isdefault = FALSE; // used to determine whether key exists in config
518
  int isdefault = FALSE; // used to determine whether key exists in config
455
  char* filtername;
519
  char* filtername;
456
520
457
#ifdef USE_GEOIP
521
//#ifdef USE_GEOIP
458
  char *str = NULL;
522
  char *str = NULL;
459
#endif
523
//#endif
460
524
461
525
462
  struct server_filter_vars* filter;
526
  struct server_filter_vars* filter;
Lines 490-495 Link Here
490
    filter->game_type          		= config_get_string("game_type");
554
    filter->game_type          		= config_get_string("game_type");
491
    filter->map_contains       		= config_get_string("map_contains");
555
    filter->map_contains       		= config_get_string("map_contains");
492
    filter->server_name_contains	= config_get_string("server_name_contains");
556
    filter->server_name_contains	= config_get_string("server_name_contains");
557
    filter->at_least_that_num           = config_get_int  ("at_least_that_num=0");
493
#ifdef USE_GEOIP
558
#ifdef USE_GEOIP
494
559
495
    /*country filter ids*/
560
    /*country filter ids*/
Lines 511-516 Link Here
511
    }
576
    }
512
      
577
      
513
#endif
578
#endif
579
   
580
    filter->svars = g_strsplit(config_get_string("svars_include"), " || ", 0);
581
514
    g_array_append_val(server_filters,filter);
582
    g_array_append_val(server_filters,filter);
515
    
583
    
516
    config_pop_prefix ();
584
    config_pop_prefix ();
Lines 560-573 Link Here
560
{
628
{
561
#ifdef USE_GEOIP
629
#ifdef USE_GEOIP
562
 int country_nr;
630
 int country_nr;
563
 int i;
631
// int i;
564
#endif
632
#endif
633
 int i;
565
634
566
  struct server_filter_vars* filter = server_filter_vars_new();
635
  struct server_filter_vars* filter = server_filter_vars_new();
567
  if(!filter) return NULL;
636
  if(!filter) return NULL;
568
637
569
  filter->filter_retries = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (filter_retries_spinner));
638
  filter->filter_retries = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (filter_retries_spinner));
570
  filter->filter_ping = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (filter_ping_spinner));
639
  filter->filter_ping = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (filter_ping_spinner));
640
  filter->at_least_that_num = gtk_spin_button_get_value_as_int (GTK_SPIN_BUTTON (at_least_that_num_spinner));
571
  filter->filter_not_full = GTK_TOGGLE_BUTTON (filter_not_full_check_button)->active;
641
  filter->filter_not_full = GTK_TOGGLE_BUTTON (filter_not_full_check_button)->active;
572
  filter->filter_not_empty = GTK_TOGGLE_BUTTON (filter_not_empty_check_button)->active;
642
  filter->filter_not_empty = GTK_TOGGLE_BUTTON (filter_not_empty_check_button)->active;
573
  filter->filter_no_password = GTK_TOGGLE_BUTTON (filter_no_password_check_button)->active;
643
  filter->filter_no_password = GTK_TOGGLE_BUTTON (filter_no_password_check_button)->active;
Lines 577-583 Link Here
577
  filter->game_contains = gtk_editable_get_chars (GTK_EDITABLE (game_contains_entry), 0, -1 );
647
  filter->game_contains = gtk_editable_get_chars (GTK_EDITABLE (game_contains_entry), 0, -1 );
578
  filter->map_contains = gtk_editable_get_chars (GTK_EDITABLE (map_contains_entry), 0, -1 );
648
  filter->map_contains = gtk_editable_get_chars (GTK_EDITABLE (map_contains_entry), 0, -1 );
579
  filter->server_name_contains = gtk_editable_get_chars (GTK_EDITABLE (server_name_contains_entry), 0, -1 );
649
  filter->server_name_contains = gtk_editable_get_chars (GTK_EDITABLE (server_name_contains_entry), 0, -1 );
580
581
#ifdef USE_GEOIP
650
#ifdef USE_GEOIP
582
651
583
  for (i = 0; i < last_row_country_list; ++i) {
652
  for (i = 0; i < last_row_country_list; ++i) {
Lines 586-591 Link Here
586
  }
655
  }
587
  
656
  
588
#endif
657
#endif
658
  
659
  if (GTK_CLIST(svars_filter_list)->rows) {
660
    filter->svars = (char **) g_malloc0 ((GTK_CLIST(svars_filter_list)->rows + 1)* sizeof(char*)); 
661
    char *tmp;
662
    for (i = 0; i < GTK_CLIST(svars_filter_list)->rows; i++) {
663
      gtk_clist_get_text(GTK_CLIST(svars_filter_list), i, 0, &tmp);
664
      filter->svars[i] = (char *) g_malloc0 (strlen(tmp) + 1); 
665
      strcpy(filter->svars[i], tmp);
666
    }
667
  } 
589
668
590
  return filter;
669
  return filter;
591
}
670
}
Lines 705-710 Link Here
705
    filters[FILTER_SERVER].changed = FILTER_CHANGED;
784
    filters[FILTER_SERVER].changed = FILTER_CHANGED;
706
  }
785
  }
707
786
787
  if (oldfilter->at_least_that_num != newfilter->at_least_that_num) {
788
    config_set_int  ("at_least_that_num", oldfilter->at_least_that_num = newfilter->at_least_that_num);
789
    filters[FILTER_SERVER].changed = FILTER_CHANGED;
790
  }
791
708
  /* GAMECONTAINS string values -- baa */
792
  /* GAMECONTAINS string values -- baa */
709
  text_changed = 0;
793
  text_changed = 0;
710
  if(newfilter->game_contains && strlen(newfilter->game_contains )){
794
  if(newfilter->game_contains && strlen(newfilter->game_contains )){
Lines 878-883 Link Here
878
962
879
#endif
963
#endif
880
964
965
  if (newfilter->svars != NULL) {
966
    config_set_string ("svars_include",  g_strjoinv(" || ", newfilter->svars));
967
    filters[FILTER_SERVER].changed = FILTER_CHANGED;
968
  }
881
969
882
  if (oldfilter->filter_not_full != newfilter->filter_not_full) {
970
  if (oldfilter->filter_not_full != newfilter->filter_not_full) {
883
    config_set_bool ("not full", oldfilter->filter_not_full = newfilter->filter_not_full);
971
    config_set_bool ("not full", oldfilter->filter_not_full = newfilter->filter_not_full);
Lines 1083-1088 Link Here
1083
  gtk_widget_set_sensitive(game_contains_entry,sensitive);
1171
  gtk_widget_set_sensitive(game_contains_entry,sensitive);
1084
  gtk_widget_set_sensitive(map_contains_entry,sensitive);
1172
  gtk_widget_set_sensitive(map_contains_entry,sensitive);
1085
  gtk_widget_set_sensitive(server_name_contains_entry,sensitive);
1173
  gtk_widget_set_sensitive(server_name_contains_entry,sensitive);
1174
  gtk_widget_set_sensitive(at_least_that_num_spinner,sensitive);
1086
  gtk_widget_set_sensitive(filter_ping_spinner,sensitive);
1175
  gtk_widget_set_sensitive(filter_ping_spinner,sensitive);
1087
  gtk_widget_set_sensitive(filter_retries_spinner,sensitive);
1176
  gtk_widget_set_sensitive(filter_retries_spinner,sensitive);
1088
  gtk_widget_set_sensitive(filter_not_full_check_button,sensitive);
1177
  gtk_widget_set_sensitive(filter_not_full_check_button,sensitive);
Lines 1101-1106 Link Here
1101
    }
1190
    }
1102
  }
1191
  }
1103
#endif
1192
#endif
1193
    gtk_widget_set_sensitive(svars_filter_list, sensitive);
1194
    gtk_widget_set_sensitive(scrolledwindow_fsvars, sensitive);
1195
    gtk_widget_set_sensitive(svars_selection_button, sensitive);
1196
    gtk_widget_set_sensitive(svars_clear_button, sensitive);
1197
    if (!sensitive)
1198
      gtk_clist_clear(GTK_CLIST(svars_filter_list));
1104
}
1199
}
1105
1200
1106
static void server_filter_fill_widgets(guint num)
1201
static void server_filter_fill_widgets(guint num)
Lines 1115-1121 Link Here
1115
  
1210
  
1116
  struct pixmap* countrypix = NULL;
1211
  struct pixmap* countrypix = NULL;
1117
  buf[2]='\0';
1212
  buf[2]='\0';
1118
#endif
1213
#endif  
1119
1214
1120
  if(num > 0)
1215
  if(num > 0)
1121
  {
1216
  {
Lines 1152-1158 Link Here
1152
    gchar *text[1] = {buf};
1247
    gchar *text[1] = {buf};
1153
  
1248
  
1154
    if (filter->countries != NULL) {
1249
    if (filter->countries != NULL) {
1155
    
1250
1156
      for (i = 0; i < filter->countries->len; ++i) {
1251
      for (i = 0; i < filter->countries->len; ++i) {
1157
    
1252
    
1158
        f_number=g_array_index(filter->countries,int,i);
1253
        f_number=g_array_index(filter->countries,int,i);
Lines 1176-1184 Link Here
1176
  
1271
  
1177
#endif
1272
#endif
1178
1273
1274
  gtk_clist_clear(GTK_CLIST(svars_filter_list));
1275
  if (filter->svars) {
1276
    int i;
1277
    for (i = 0; filter->svars[i]; i++)
1278
      gtk_clist_append(GTK_CLIST(svars_filter_list), &filter->svars[i]);
1279
  }
1280
1179
  gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
1281
  gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
1180
	GTK_SPIN_BUTTON(filter_ping_spinner)),filter->filter_ping);
1282
	GTK_SPIN_BUTTON(filter_ping_spinner)),filter->filter_ping);
1181
  gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
1283
  gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
1284
	GTK_SPIN_BUTTON(at_least_that_num_spinner)),filter->at_least_that_num);
1285
  gtk_adjustment_set_value(gtk_spin_button_get_adjustment(
1182
	GTK_SPIN_BUTTON(filter_retries_spinner)),filter->filter_retries);
1286
	GTK_SPIN_BUTTON(filter_retries_spinner)),filter->filter_retries);
1183
1287
1184
  gtk_toggle_button_set_active (
1288
  gtk_toggle_button_set_active (
Lines 1212-1220 Link Here
1212
  GtkWidget *button;
1316
  GtkWidget *button;
1213
  GtkObject *adj;
1317
  GtkObject *adj;
1214
1318
1215
#ifdef USE_GEOIP
1319
//#ifdef USE_GEOIP
1216
  GtkWidget *vbuttonbox1;
1320
  GtkWidget *vbuttonbox1;
1217
#endif
1321
//#endif
1218
  
1322
  
1219
1323
1220
//  char label_buf[64];
1324
//  char label_buf[64];
Lines 1296-1306 Link Here
1296
  alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1400
  alignment = gtk_alignment_new (0.5, 0.5, 0.0, 0.0);
1297
  gtk_container_add (GTK_CONTAINER (frame), alignment);
1401
  gtk_container_add (GTK_CONTAINER (frame), alignment);
1298
1402
1299
  #ifdef USE_GEOIP
1403
//  #ifdef USE_GEOIP
1300
    table = gtk_table_new (8, 5, FALSE);
1404
    table = gtk_table_new (8, 5, FALSE);
1301
  #else
1405
//  #else
1302
    table = gtk_table_new (6, 5, FALSE);
1406
//    table = gtk_table_new (6, 5, FALSE);
1303
  #endif
1407
//  #endif
1304
1408
1305
  gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1409
  gtk_table_set_row_spacings (GTK_TABLE (table), 2);
1306
  gtk_table_set_col_spacings (GTK_TABLE (table), 4);
1410
  gtk_table_set_col_spacings (GTK_TABLE (table), 4);
Lines 1327-1334 Link Here
1327
  gtk_table_attach_defaults (GTK_TABLE (table), filter_ping_spinner, 1, 2, row, row+1);
1431
  gtk_table_attach_defaults (GTK_TABLE (table), filter_ping_spinner, 1, 2, row, row+1);
1328
  gtk_widget_show (filter_ping_spinner);
1432
  gtk_widget_show (filter_ping_spinner);
1329
1433
1330
1434
   /* GAMECONTAINS Filter -- baa */
1331
  /* GAMECONTAINS Filter -- baa */
1332
  /* http://developer.gnome.org/doc/API/gtk/gtktable.html */
1435
  /* http://developer.gnome.org/doc/API/gtk/gtktable.html */
1333
    
1436
    
1334
  label = gtk_label_new (_("the game contains the string"));
1437
  label = gtk_label_new (_("the game contains the string"));
Lines 1461-1466 Link Here
1461
  gtk_widget_show (server_name_contains_entry);
1564
  gtk_widget_show (server_name_contains_entry);
1462
  row++;
1565
  row++;
1463
1566
1567
1568
  /* at least that num of players*/
1569
  label = gtk_label_new (_("with at least that number of players"));
1570
  gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
1571
  gtk_table_attach (GTK_TABLE (table), label, 3, 4, row, row+1, GTK_FILL, GTK_FILL,
1572
                                                                         0, 0);
1573
  gtk_widget_show (label);
1574
1575
  adj = gtk_adjustment_new (0, 0, 99, 1, 100, 0);
1576
1577
  at_least_that_num_spinner = gtk_spin_button_new (GTK_ADJUSTMENT (adj), 0, 0);
1578
  gtk_spin_button_set_update_policy (GTK_SPIN_BUTTON (at_least_that_num_spinner), 
1579
                                                            GTK_UPDATE_ALWAYS);
1580
  gtk_widget_set_usize (at_least_that_num_spinner, 64, -1);
1581
  gtk_signal_connect_object (GTK_OBJECT (at_least_that_num_spinner), "changed",
1582
                 GTK_SIGNAL_FUNC (server_filter_set_changed_callback), (gpointer) TRUE);
1583
  gtk_table_attach_defaults (GTK_TABLE (table), at_least_that_num_spinner, 4, 5, row, row+1);
1584
  gtk_widget_show (at_least_that_num_spinner);
1585
1464
  /*row=5..6*/
1586
  /*row=5..6*/
1465
1587
1466
  /* no password */
1588
  /* no password */
Lines 1487-1493 Link Here
1487
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW
1609
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW
1488
         (scrolledwindow_fcountry),
1610
         (scrolledwindow_fcountry),
1489
         GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1611
         GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1490
1612
  
1491
  country_filter_list = gtk_clist_new(1);
1613
  country_filter_list = gtk_clist_new(1);
1492
  gtk_clist_set_shadow_type(GTK_CLIST(country_filter_list),GTK_SHADOW_NONE);
1614
  gtk_clist_set_shadow_type(GTK_CLIST(country_filter_list),GTK_SHADOW_NONE);
1493
  gtk_widget_set_sensitive(country_filter_list,FALSE);
1615
  gtk_widget_set_sensitive(country_filter_list,FALSE);
Lines 1543-1548 Link Here
1543
  gtk_widget_set_usize(country_clear_button, 80, -1);
1665
  gtk_widget_set_usize(country_clear_button, 80, -1);
1544
#endif
1666
#endif
1545
1667
1668
//svars
1669
  label = gtk_label_new(_("Custom server info variables:"));
1670
  gtk_table_attach_defaults(GTK_TABLE(table), label, 2, 3, 6, 7);
1671
  gtk_misc_set_padding(GTK_MISC(label), 0, 15);
1672
  gtk_misc_set_alignment(GTK_MISC(label), 0.0, 0.5);
1673
  gtk_widget_show(label);
1674
1675
  scrolledwindow_fsvars = gtk_scrolled_window_new(NULL, NULL);
1676
  gtk_widget_set_sensitive(scrolledwindow_fsvars,FALSE);
1677
  gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW
1678
         (scrolledwindow_fsvars),
1679
         GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
1680
  //char *titles[1] = { _("Svar and value") };
1681
  //svars_filter_list = gtk_clist_new_with_titles(1, titles);
1682
  svars_filter_list = gtk_clist_new(1);
1683
  gtk_clist_set_shadow_type(GTK_CLIST(svars_filter_list),GTK_SHADOW_NONE);
1684
  gtk_widget_set_sensitive(svars_filter_list,FALSE);
1685
  
1686
  
1687
  gtk_clist_set_column_justification(GTK_CLIST(svars_filter_list), 0,
1688
             GTK_JUSTIFY_LEFT);
1689
  gtk_clist_set_column_width(GTK_CLIST(svars_filter_list), 0, 100);
1690
  gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW
1691
          (scrolledwindow_fsvars),
1692
          svars_filter_list);
1693
1694
  gtk_widget_set_usize(scrolledwindow_fsvars, 100, 100);
1695
1696
  gtk_table_attach_defaults(GTK_TABLE(table), scrolledwindow_fsvars, 2,
1697
          4, 7, 8);
1698
  gtk_widget_show(scrolledwindow_fsvars);
1699
  gtk_widget_show(svars_filter_list);
1700
1701
 
1702
 //svars add and clear buttons 
1703
  vbuttonbox1 = gtk_vbutton_box_new();
1704
  gtk_widget_show(vbuttonbox1);
1705
  gtk_table_attach_defaults(GTK_TABLE(table), vbuttonbox1, 4, 5, 7, 8);
1706
  gtk_button_box_set_layout(GTK_BUTTON_BOX(vbuttonbox1),
1707
          GTK_BUTTONBOX_START);
1708
  gtk_button_box_set_spacing(GTK_BUTTON_BOX(vbuttonbox1), 1);
1709
  gtk_button_box_set_child_size(GTK_BUTTON_BOX(vbuttonbox1), 80, 0);
1710
  gtk_button_box_set_child_ipadding(GTK_BUTTON_BOX(vbuttonbox1), 5, -1);
1711
1712
  svars_selection_button = gtk_button_new_with_label(_("add..."));
1713
  gtk_widget_set_sensitive(svars_selection_button,FALSE);
1714
  gtk_widget_show(svars_selection_button);
1715
  gtk_container_add(GTK_CONTAINER(vbuttonbox1),
1716
        svars_selection_button);
1717
  gtk_widget_set_usize(svars_selection_button, 80, -1);
1718
  gtk_signal_connect(GTK_OBJECT(svars_selection_button), "clicked",
1719
         GTK_SIGNAL_FUNC(svars_select_button_pressed), NULL);
1720
  
1721
  gtk_signal_connect_object(GTK_OBJECT(svars_selection_button), "clicked",
1722
          GTK_SIGNAL_FUNC(server_filter_set_changed_callback),(gpointer) TRUE);
1723
    
1724
  
1725
  svars_clear_button = gtk_button_new_with_label(_("clear"));
1726
  gtk_widget_set_sensitive(svars_clear_button,FALSE);
1727
  gtk_signal_connect(GTK_OBJECT(svars_clear_button), "clicked",
1728
         GTK_SIGNAL_FUNC(svars_clear_list), NULL);
1729
  gtk_signal_connect_object(GTK_OBJECT(svars_clear_button), "clicked",
1730
          GTK_SIGNAL_FUNC(server_filter_set_changed_callback),(gpointer) TRUE);
1731
          
1732
  
1733
  gtk_widget_show(svars_clear_button);
1734
  gtk_container_add(GTK_CONTAINER(vbuttonbox1), svars_clear_button);
1735
  gtk_widget_set_usize(svars_clear_button, 80, -1);
1736
//-svars
1737
1546
  gtk_widget_show (table);
1738
  gtk_widget_show (table);
1547
  gtk_widget_show (alignment);
1739
  gtk_widget_show (alignment);
1548
  gtk_widget_show (frame);
1740
  gtk_widget_show (frame);
Lines 2138-2143 Link Here
2138
}
2330
}
2139
#endif
2331
#endif
2140
2332
2333
static void svars_select_button_pressed()
2334
{
2335
  char *svar = enter_string_dialog(TRUE,_("Enter a server variable"));
2336
  char *value;
2337
  if (svar)
2338
    value = enter_string_dialog(TRUE,_("Enter its value, comma separated values allowed (e.g. abc or 0,2,7)"));
2339
  if (svar && value) {
2340
    g_strstrip(value);
2341
    gchar *sv = g_strconcat(svar, " = ", value, NULL);
2342
    gtk_clist_append(GTK_CLIST(svars_filter_list), &sv);
2343
    g_free(sv);
2344
    g_free(value);
2345
  }
2346
  g_free(svar);
2347
}
2348
2349
static void svars_clear_list(GtkWidget * widget, gpointer data)
2350
{
2351
  gtk_clist_clear(GTK_CLIST(svars_filter_list));
2352
}
2353
2141
unsigned filter_time_inc()
2354
unsigned filter_time_inc()
2142
{
2355
{
2143
  ++filter_current_time;
2356
  ++filter_current_time;
(-)xqf-1.0.5/src/filter.h (-1 / +3 lines)
Lines 58-66 Link Here
58
  char    *game_type;
58
  char    *game_type;
59
  char 	  *map_contains;
59
  char 	  *map_contains;
60
  char	  *server_name_contains;
60
  char	  *server_name_contains;
61
  int     at_least_that_num;
61
#ifdef USE_GEOIP
62
#ifdef USE_GEOIP
62
  GArray *countries;
63
  GArray  *countries;
63
#endif
64
#endif
65
  char    **svars;
64
66
65
};
67
};
66
68
(-)xqf-1.0.5/src/game.c (+21 lines)
Lines 999-1004 Link Here
999
  "Bomb Mode",		/* 8 = Bomb Mode */
999
  "Bomb Mode",		/* 8 = Bomb Mode */
1000
};
1000
};
1001
1001
1002
#define MAX_Q3A_UT4_TYPES 9
1003
static char *q3a_ut4_gametypes[MAX_Q3A_UT4_TYPES] = {
1004
  "FFA",                /* 0 = Free for All */
1005
  "FFA",                /* 1 = Free for All */
1006
  "FFA",                /* 2 = Free for All */
1007
  "TDM",                /* 3 = Team Deathmatch */
1008
  "Team Survivor",      /* 4 = Team Survivor */
1009
  "Follow the Leader",  /* 5 = Follow the Leader */
1010
  "Capture & Hold",     /* 6 = Capture & Hold */
1011
  "CTF",                /* 7 = Capture the Flag */
1012
  "Bomb Mode",          /* 8 = Bomb Mode */
1013
};
1002
1014
1003
#define MAX_Q3A_Q3TC045_TYPES 11
1015
#define MAX_Q3A_Q3TC045_TYPES 11
1004
static char *q3a_q3tc045_gametypes[MAX_Q3A_Q3TC045_TYPES] = {
1016
static char *q3a_q3tc045_gametypes[MAX_Q3A_Q3TC045_TYPES] = {
Lines 1223-1228 Link Here
1223
    MAX_Q3A_UT3_TYPES
1235
    MAX_Q3A_UT3_TYPES
1224
  },
1236
  },
1225
  {
1237
  {
1238
    "q3ut4",
1239
    q3a_ut4_gametypes,
1240
    MAX_Q3A_UT4_TYPES
1241
  },
1242
  {
1226
    "threewave",
1243
    "threewave",
1227
    q3a_threewave_gametypes,
1244
    q3a_threewave_gametypes,
1228
    MAX_Q3A_THREEWAVE_TYPES
1245
    MAX_Q3A_THREEWAVE_TYPES
Lines 1568-1573 Link Here
1568
    else if (!strcmp(*info_ptr, "sv_punkbuster") && info_ptr[1] && info_ptr[1][0] == '1') {
1585
    else if (!strcmp(*info_ptr, "sv_punkbuster") && info_ptr[1] && info_ptr[1][0] == '1') {
1569
      s->flags |= SERVER_PUNKBUSTER;
1586
      s->flags |= SERVER_PUNKBUSTER;
1570
    }
1587
    }
1588
    else if (!strcmp(*info_ptr, "sv_battleye") && info_ptr[1] && info_ptr[1][0
1589
] == '1') {
1590
      s->flags |= SERVER_BATTLEYE;
1591
    }
1571
    else if (!strcmp(*info_ptr, "protocol")) {
1592
    else if (!strcmp(*info_ptr, "protocol")) {
1572
      const char* masterprotocol = game_get_attribute(s->type,"masterprotocol");
1593
      const char* masterprotocol = game_get_attribute(s->type,"masterprotocol");
1573
      
1594
      
(-)xqf-1.0.5/src/pixmaps.c (+8 lines)
Lines 107-112 Link Here
107
#include "xpm/locked.xpm"
107
#include "xpm/locked.xpm"
108
#include "xpm/punkbuster.xpm"
108
#include "xpm/punkbuster.xpm"
109
#include "xpm/locked_punkbuster.xpm"
109
#include "xpm/locked_punkbuster.xpm"
110
#include "xpm/battleye.xpm"
111
#include "xpm/locked_battleye.xpm"
110
#undef static
112
#undef static
111
113
112
struct pixmap update_pix;
114
struct pixmap update_pix;
Lines 140-145 Link Here
140
struct pixmap locked_pix;
142
struct pixmap locked_pix;
141
struct pixmap punkbuster_pix;
143
struct pixmap punkbuster_pix;
142
struct pixmap locked_punkbuster_pix;
144
struct pixmap locked_punkbuster_pix;
145
struct pixmap battleye_pix;
146
struct pixmap locked_battleye_pix;
143
147
144
static GdkGC *pixmaps_gc;
148
static GdkGC *pixmaps_gc;
145
static GdkGC *masks_gc;
149
static GdkGC *masks_gc;
Lines 237-242 Link Here
237
241
238
  free_pixmap (&punkbuster_pix);
242
  free_pixmap (&punkbuster_pix);
239
  free_pixmap (&locked_punkbuster_pix);
243
  free_pixmap (&locked_punkbuster_pix);
244
  free_pixmap (&battleye_pix);
245
  free_pixmap (&locked_battleye_pix);
240
246
241
  for (i = 0; i < GAMES_TOTAL; i++)
247
  for (i = 0; i < GAMES_TOTAL; i++)
242
  {
248
  {
Lines 360-365 Link Here
360
  create_pixmap (window, "locked.xpm", &locked_pix);
366
  create_pixmap (window, "locked.xpm", &locked_pix);
361
  create_pixmap (window, "punkbuster.xpm", &punkbuster_pix);
367
  create_pixmap (window, "punkbuster.xpm", &punkbuster_pix);
362
  cat_pixmaps(window, &locked_punkbuster_pix, &punkbuster_pix, &locked_pix);
368
  cat_pixmaps(window, &locked_punkbuster_pix, &punkbuster_pix, &locked_pix);
369
  create_pixmap (window, "battleye.xpm", &battleye_pix);
370
  cat_pixmaps(window, &locked_battleye_pix, &battleye_pix, &locked_pix);
363
371
364
  for (i = 0; i < GAMES_TOTAL; i++)
372
  for (i = 0; i < GAMES_TOTAL; i++)
365
  {
373
  {
(-)xqf-1.0.5/src/pixmaps.h (+3 lines)
Lines 68-73 Link Here
68
extern	struct pixmap punkbuster_pix;
68
extern	struct pixmap punkbuster_pix;
69
extern	struct pixmap locked_punkbuster_pix;
69
extern	struct pixmap locked_punkbuster_pix;
70
70
71
extern  struct pixmap battleye_pix;
72
extern  struct pixmap locked_battleye_pix;
73
71
extern	int pixmap_height (GdkPixmap *pixmap);
74
extern	int pixmap_height (GdkPixmap *pixmap);
72
extern	int pixmap_width (GdkPixmap *pixmap);
75
extern	int pixmap_width (GdkPixmap *pixmap);
73
76
(-)xqf-1.0.5/src/pref.c (+24 lines)
Lines 110-115 Link Here
110
int	default_refresh_sorts;
110
int	default_refresh_sorts;
111
int	default_refresh_on_update;
111
int	default_refresh_on_update;
112
int	default_resolve_on_update;
112
int	default_resolve_on_update;
113
int	default_refresh_non_visible;
113
int	default_show_only_configured_games;
114
int	default_show_only_configured_games;
114
char*   default_icontheme;
115
char*   default_icontheme;
115
116
Lines 192-197 Link Here
192
static  GtkWidget *refresh_sorts_check_button;
193
static  GtkWidget *refresh_sorts_check_button;
193
static  GtkWidget *refresh_on_update_check_button;
194
static  GtkWidget *refresh_on_update_check_button;
194
static  GtkWidget *resolve_on_update_check_button;
195
static  GtkWidget *resolve_on_update_check_button;
196
static  GtkWidget *refresh_non_visible_check_button;
195
static  GtkWidget *show_only_configured_games_check_button;
197
static  GtkWidget *show_only_configured_games_check_button;
196
static  GtkWidget *use_custom_gtkrc_check_button;
198
static  GtkWidget *use_custom_gtkrc_check_button;
197
199
Lines 1054-1059 Link Here
1054
  if (i != default_resolve_on_update)
1056
  if (i != default_resolve_on_update)
1055
    config_set_bool ("resolve on update", default_resolve_on_update = i);
1057
    config_set_bool ("resolve on update", default_resolve_on_update = i);
1056
1058
1059
  i = GTK_TOGGLE_BUTTON (refresh_non_visible_check_button)->active;
1060
  if (i != default_refresh_non_visible)
1061
    config_set_bool ("refresh non visible", default_refresh_non_visible = i);
1062
1057
  i = GTK_TOGGLE_BUTTON (show_only_configured_games_check_button)->active;
1063
  i = GTK_TOGGLE_BUTTON (show_only_configured_games_check_button)->active;
1058
  if (i != default_show_only_configured_games)
1064
  if (i != default_show_only_configured_games)
1059
    config_set_bool ("show only configured games", default_show_only_configured_games = i);
1065
    config_set_bool ("show only configured games", default_show_only_configured_games = i);
Lines 3784-3789 Link Here
3784
  gtk_widget_show (hbox);
3790
  gtk_widget_show (hbox);
3785
3791
3786
3792
3793
  /* Refresh non visible */
3794
3795
  hbox = gtk_hbox_new (FALSE, 4);
3796
  gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
3797
3798
  refresh_non_visible_check_button = 
3799
                     gtk_check_button_new_with_label (_("Refresh non-visible servers"));
3800
  gtk_toggle_button_set_active (
3801
                          GTK_TOGGLE_BUTTON (refresh_non_visible_check_button), 
3802
                          default_refresh_non_visible);
3803
  gtk_box_pack_start (GTK_BOX (hbox), refresh_non_visible_check_button, 
3804
                                                             FALSE, FALSE, 0);
3805
  gtk_widget_show (refresh_non_visible_check_button);
3806
3807
  gtk_widget_show (hbox);
3808
3809
3787
  /* Show only configured games */
3810
  /* Show only configured games */
3788
3811
3789
  hbox = gtk_hbox_new (FALSE, 4);
3812
  hbox = gtk_hbox_new (FALSE, 4);
Lines 5146-5151 Link Here
5146
  default_refresh_sorts =     config_get_bool ("sort on refresh=true");
5169
  default_refresh_sorts =     config_get_bool ("sort on refresh=true");
5147
  default_refresh_on_update = config_get_bool ("refresh on update=true");
5170
  default_refresh_on_update = config_get_bool ("refresh on update=true");
5148
  default_resolve_on_update = config_get_bool ("resolve on update=false");
5171
  default_resolve_on_update = config_get_bool ("resolve on update=false");
5172
  default_refresh_non_visible=config_get_bool ("refresh non visible=false");
5149
  default_show_only_configured_games =    config_get_bool ("show only configured games=false");
5173
  default_show_only_configured_games =    config_get_bool ("show only configured games=false");
5150
  default_icontheme =         config_get_string ("icontheme");
5174
  default_icontheme =         config_get_string ("icontheme");
5151
5175
(-)xqf-1.0.5/src/pref.h (+1 lines)
Lines 97-102 Link Here
97
extern	int	default_refresh_sorts;
97
extern	int	default_refresh_sorts;
98
extern	int	default_refresh_on_update;
98
extern	int	default_refresh_on_update;
99
extern	int	default_resolve_on_update;
99
extern	int	default_resolve_on_update;
100
extern  int	default_refresh_non_visible;
100
extern	int	default_show_only_configured_games;
101
extern	int	default_show_only_configured_games;
101
extern  char*   default_icontheme;
102
extern  char*   default_icontheme;
102
103
(-)xqf-1.0.5/src/sort.c (+11 lines)
Lines 148-153 Link Here
148
    else
148
    else
149
      res = 0;
149
      res = 0;
150
    break;
150
    break;
151
152
  case SORT_SERVER_BATTLEYE:
153
    if( (s1->flags & SERVER_BATTLEYE ) && ( s2->flags & SERVER_BATTLEYE ))
154
      res = 0;
155
    else if (s1->flags & SERVER_BATTLEYE )
156
      res = 1;
157
    else if (s2->flags & SERVER_BATTLEYE )
158
      res = -1;
159
    else
160
      res = 0;
161
    break;
151
 
162
 
152
  case SORT_SERVER_PLAYERS:
163
  case SORT_SERVER_PLAYERS:
153
    res = s1->curplayers - s2->curplayers;
164
    res = s1->curplayers - s2->curplayers;
(-)xqf-1.0.5/src/sort.h (+1 lines)
Lines 29-34 Link Here
29
  SORT_SERVER_TO,
29
  SORT_SERVER_TO,
30
  SORT_SERVER_PRIVATE,
30
  SORT_SERVER_PRIVATE,
31
  SORT_SERVER_ANTICHEAT,
31
  SORT_SERVER_ANTICHEAT,
32
  SORT_SERVER_BATTLEYE,
32
  SORT_SERVER_PLAYERS,
33
  SORT_SERVER_PLAYERS,
33
  SORT_SERVER_MAXPLAYERS,
34
  SORT_SERVER_MAXPLAYERS,
34
  SORT_SERVER_MAP,
35
  SORT_SERVER_MAP,
(-)xqf-1.0.5/src/srv-list.c (-4 / +16 lines)
Lines 80-92 Link Here
80
{
80
{
81
  PIX_PASSWORD = 0x001,
81
  PIX_PASSWORD = 0x001,
82
  PIX_PUNKBUSTER = 0x002,
82
  PIX_PUNKBUSTER = 0x002,
83
  PIX_BATTLEYE = 0x004,
83
};
84
};
84
85
85
struct pixmap* pix2array[] = {
86
struct pixmap* pix2array[] = {
86
  NULL,
87
  NULL,
87
  &locked_pix,
88
  &locked_pix,
88
  &punkbuster_pix,
89
  &punkbuster_pix,
89
  &locked_punkbuster_pix
90
  &locked_punkbuster_pix,
91
  &battleye_pix,
92
  &locked_battleye_pix
90
};
93
};
91
94
92
static struct pixmap* get_server_pixmap2(struct server* s)
95
static struct pixmap* get_server_pixmap2(struct server* s)
Lines 97-102 Link Here
97
    flags |= PIX_PASSWORD;
100
    flags |= PIX_PASSWORD;
98
  if (s->flags & SERVER_PUNKBUSTER)
101
  if (s->flags & SERVER_PUNKBUSTER)
99
    flags |= PIX_PUNKBUSTER;
102
    flags |= PIX_PUNKBUSTER;
103
  if (s->flags & SERVER_BATTLEYE)
104
    flags |= PIX_BATTLEYE;
100
105
101
  return pix2array[flags];
106
  return pix2array[flags];
102
}
107
}
Lines 535-543 Link Here
535
  int row;
540
  int row;
536
541
537
  debug (6, "start");
542
  debug (6, "start");
538
  for (row = 0; row < server_clist->rows; row++) {
543
  if(!default_refresh_non_visible) {
539
    server = (struct server *) gtk_clist_get_row_data (server_clist, row);
544
    for (row = 0; row < server_clist->rows; row++) {
540
    list = server_list_prepend (list, server);
545
      server = (struct server *) gtk_clist_get_row_data (server_clist, row);
546
      list = server_list_prepend (list, server);
547
    }
548
  }
549
  else {
550
    server_clist_build_filtered (cur_server_list, FALSE);
551
    list = server_list_copy(cur_server_list);
552
    server_clist_build_filtered (cur_server_list, TRUE);
541
  }
553
  }
542
  debug (6, "Return list %lx", list);
554
  debug (6, "Return list %lx", list);
543
  return g_slist_reverse (list);
555
  return g_slist_reverse (list);
(-)xqf-1.0.5/src/utils.c (+27 lines)
Lines 1194-1196 Link Here
1194
}
1194
}
1195
#endif	// ! RCON_STANDALONE
1195
#endif	// ! RCON_STANDALONE
1196
1196
1197
//g_strdupv from glib2, for compatibility with 1.x compiles
1198
gchar** g_strdupv2 (gchar **str_array)
1199
{
1200
  if (str_array)
1201
    {
1202
      gint i;
1203
      gchar **retval;
1204
1205
      i = 0;
1206
      while (str_array[i])
1207
        ++i;
1208
1209
      retval = g_new (gchar*, i + 1);
1210
1211
      i = 0;
1212
      while (str_array[i])
1213
        {
1214
          retval[i] = g_strdup (str_array[i]);
1215
          ++i;
1216
        }
1217
      retval[i] = NULL;
1218
1219
      return retval;
1220
    }
1221
  else
1222
    return NULL;
1223
}
(-)xqf-1.0.5/src/utils.h (+3 lines)
Lines 173-176 Link Here
173
 */
173
 */
174
char* load_file_mem(const char* name, size_t* size);
174
char* load_file_mem(const char* name, size_t* size);
175
175
176
// g_strdupv from glib2, for compatibility with glib1 compiles
177
gchar** g_strdupv2 (gchar **str_array);
178
176
#endif /* __UTILS_H__ */
179
#endif /* __UTILS_H__ */
(-)xqf-1.0.5/src/xpm/battleye.xpm (+167 lines)
Line 0 Link Here
1
/* XPM */
2
static char * battleye_xpm[] = {
3
"17 17 147 2",
4
"  	c None",
5
". 	c #DD9B6A",
6
"+ 	c #CF8E5C",
7
"@ 	c #B27C51",
8
"# 	c #9A6E47",
9
"$ 	c #A07148",
10
"% 	c #C59165",
11
"& 	c #D29764",
12
"* 	c #D09561",
13
"= 	c #CF935F",
14
"- 	c #CD905B",
15
"; 	c #CD8650",
16
"> 	c #B2784D",
17
", 	c #A47148",
18
"' 	c #916540",
19
") 	c #855C38",
20
"! 	c #7D5939",
21
"~ 	c #7E5E42",
22
"{ 	c #C89162",
23
"] 	c #D29561",
24
"^ 	c #C78B58",
25
"/ 	c #CD8F58",
26
"( 	c #A56636",
27
"_ 	c #A76B3B",
28
": 	c #96653C",
29
"< 	c #8A5D37",
30
"[ 	c #6F4B2A",
31
"} 	c #684727",
32
"| 	c #725133",
33
"1 	c #73573F",
34
"2 	c #C38C5E",
35
"3 	c #C88D5C",
36
"4 	c #BA8556",
37
"5 	c #C68B59",
38
"6 	c #C58C57",
39
"7 	c #8B4F22",
40
"8 	c #75441E",
41
"9 	c #653E1F",
42
"0 	c #5B381B",
43
"a 	c #523115",
44
"b 	c #502F13",
45
"c 	c #644021",
46
"d 	c #AB7E57",
47
"e 	c #846347",
48
"f 	c #856244",
49
"g 	c #74563C",
50
"h 	c #703F1B",
51
"i 	c #5B3416",
52
"j 	c #533217",
53
"k 	c #512F13",
54
"l 	c #502E12",
55
"m 	c #593314",
56
"n 	c #6D4121",
57
"o 	c #806249",
58
"p 	c #936E4C",
59
"q 	c #7B5C41",
60
"r 	c #785A3F",
61
"s 	c #603715",
62
"t 	c #573112",
63
"u 	c #5B3514",
64
"v 	c #5E3613",
65
"w 	c #683B14",
66
"x 	c #7D471D",
67
"y 	c #87512A",
68
"z 	c #846449",
69
"A 	c #7A5E44",
70
"B 	c #896647",
71
"C 	c #B67F50",
72
"D 	c #846141",
73
"E 	c #623814",
74
"F 	c #693C15",
75
"G 	c #7D4D22",
76
"H 	c #824F23",
77
"I 	c #81481A",
78
"J 	c #AC6027",
79
"K 	c #AB8B70",
80
"L 	c #BD987A",
81
"M 	c #AD825F",
82
"N 	c #BD8D66",
83
"O 	c #B18461",
84
"P 	c #6A3D17",
85
"Q 	c #774314",
86
"R 	c #955F30",
87
"S 	c #986436",
88
"T 	c #9C5923",
89
"U 	c #C77436",
90
"V 	c #C47E4B",
91
"W 	c #AF9178",
92
"X 	c #CDAB8F",
93
"Y 	c #B78A67",
94
"Z 	c #C59F80",
95
"` 	c #81491A",
96
" .	c #9F571C",
97
"..	c #A56126",
98
"+.	c #A6612E",
99
"@.	c #C5814F",
100
"#.	c #C28557",
101
"$.	c #82634A",
102
"%.	c #775B43",
103
"&.	c #836042",
104
"*.	c #AC8261",
105
"=.	c #965520",
106
"-.	c #BD6F32",
107
";.	c #C1783F",
108
">.	c #BF7843",
109
",.	c #CA9369",
110
"'.	c #C1906B",
111
").	c #8D6E55",
112
"!.	c #BA9574",
113
"~.	c #B08869",
114
"{.	c #B78D6D",
115
"].	c #C57B45",
116
"^.	c #D08B58",
117
"/.	c #CA8651",
118
"(.	c #B16B35",
119
"_.	c #D08954",
120
":.	c #D19B71",
121
"<.	c #CC9F7C",
122
"[.	c #B99475",
123
"}.	c #CCA686",
124
"|.	c #CAA587",
125
"1.	c #BE9271",
126
"2.	c #AF7B4F",
127
"3.	c #B3825C",
128
"4.	c #DEA67C",
129
"5.	c #CF9A70",
130
"6.	c #CB7533",
131
"7.	c #CF8A56",
132
"8.	c #A97C5A",
133
"9.	c #B48D6D",
134
"0.	c #C49774",
135
"a.	c #C69C7C",
136
"b.	c #BF9474",
137
"c.	c #BD8B65",
138
"d.	c #B4825D",
139
"e.	c #DBB091",
140
"f.	c #E0B797",
141
"g.	c #D59E76",
142
"h.	c #CF8E5F",
143
"i.	c #D4976B",
144
"j.	c #D2A989",
145
"k.	c #BDA188",
146
"l.	c #C0926A",
147
"m.	c #C39A78",
148
"n.	c #C19A7C",
149
"o.	c #BE9577",
150
"p.	c #AE8564",
151
"                                  ",
152
"                                  ",
153
"    . + @ # $       % & * = -     ",
154
"    ; > , ' ) ! ~   { ] - ^ /     ",
155
"    ( _ : < [ } | 1 2 3 4 5 6     ",
156
"    7 8 9 0 a b c   d e f g       ",
157
"    h i j k l m n   o p q r       ",
158
"    s t u v w x y   z A B C D     ",
159
"    E F G H I J     K L M N O     ",
160
"    P Q R S T U V   W X Y Z       ",
161
"    `  ...  +.@.#.$.%.&.*.        ",
162
"    =.-.;.  >.,.'.).!.~.{.        ",
163
"    ].^./.(._.:.<.[.}.|.1.2.3.    ",
164
"    4.5._.6.7.8.9.  0.a.b.c.d.    ",
165
"    e.f.g.h.i.j.k.  l.m.n.o.p.    ",
166
"                                  ",
167
"                                  "};
(-)xqf-1.0.5/src/xpm/locked_battleye.xpm (+169 lines)
Line 0 Link Here
1
/* XPM */
2
static char * locked_battleye_xpm[] = {
3
"34 17 149 2",
4
"  	c None",
5
". 	c #DD9B6A",
6
"+ 	c #CF8E5C",
7
"@ 	c #B27C51",
8
"# 	c #9A6E47",
9
"$ 	c #A07148",
10
"% 	c #C59165",
11
"& 	c #D29764",
12
"* 	c #D09561",
13
"= 	c #CF935F",
14
"- 	c #CD905B",
15
"; 	c #FF0000",
16
"> 	c #CD8650",
17
", 	c #B2784D",
18
"' 	c #A47148",
19
") 	c #916540",
20
"! 	c #855C38",
21
"~ 	c #7D5939",
22
"{ 	c #7E5E42",
23
"] 	c #C89162",
24
"^ 	c #D29561",
25
"/ 	c #C78B58",
26
"( 	c #CD8F58",
27
"_ 	c #7F0000",
28
": 	c #A56636",
29
"< 	c #A76B3B",
30
"[ 	c #96653C",
31
"} 	c #8A5D37",
32
"| 	c #6F4B2A",
33
"1 	c #684727",
34
"2 	c #725133",
35
"3 	c #73573F",
36
"4 	c #C38C5E",
37
"5 	c #C88D5C",
38
"6 	c #BA8556",
39
"7 	c #C68B59",
40
"8 	c #C58C57",
41
"9 	c #8B4F22",
42
"0 	c #75441E",
43
"a 	c #653E1F",
44
"b 	c #5B381B",
45
"c 	c #523115",
46
"d 	c #502F13",
47
"e 	c #644021",
48
"f 	c #AB7E57",
49
"g 	c #846347",
50
"h 	c #856244",
51
"i 	c #74563C",
52
"j 	c #703F1B",
53
"k 	c #5B3416",
54
"l 	c #533217",
55
"m 	c #512F13",
56
"n 	c #502E12",
57
"o 	c #593314",
58
"p 	c #6D4121",
59
"q 	c #806249",
60
"r 	c #936E4C",
61
"s 	c #7B5C41",
62
"t 	c #785A3F",
63
"u 	c #603715",
64
"v 	c #573112",
65
"w 	c #5B3514",
66
"x 	c #5E3613",
67
"y 	c #683B14",
68
"z 	c #7D471D",
69
"A 	c #87512A",
70
"B 	c #846449",
71
"C 	c #7A5E44",
72
"D 	c #896647",
73
"E 	c #B67F50",
74
"F 	c #846141",
75
"G 	c #623814",
76
"H 	c #693C15",
77
"I 	c #7D4D22",
78
"J 	c #824F23",
79
"K 	c #81481A",
80
"L 	c #AC6027",
81
"M 	c #AB8B70",
82
"N 	c #BD987A",
83
"O 	c #AD825F",
84
"P 	c #BD8D66",
85
"Q 	c #B18461",
86
"R 	c #6A3D17",
87
"S 	c #774314",
88
"T 	c #955F30",
89
"U 	c #986436",
90
"V 	c #9C5923",
91
"W 	c #C77436",
92
"X 	c #C47E4B",
93
"Y 	c #AF9178",
94
"Z 	c #CDAB8F",
95
"` 	c #B78A67",
96
" .	c #C59F80",
97
"..	c #81491A",
98
"+.	c #9F571C",
99
"@.	c #A56126",
100
"#.	c #A6612E",
101
"$.	c #C5814F",
102
"%.	c #C28557",
103
"&.	c #82634A",
104
"*.	c #775B43",
105
"=.	c #836042",
106
"-.	c #AC8261",
107
";.	c #965520",
108
">.	c #BD6F32",
109
",.	c #C1783F",
110
"'.	c #BF7843",
111
").	c #CA9369",
112
"!.	c #C1906B",
113
"~.	c #8D6E55",
114
"{.	c #BA9574",
115
"].	c #B08869",
116
"^.	c #B78D6D",
117
"/.	c #C57B45",
118
"(.	c #D08B58",
119
"_.	c #CA8651",
120
":.	c #B16B35",
121
"<.	c #D08954",
122
"[.	c #D19B71",
123
"}.	c #CC9F7C",
124
"|.	c #B99475",
125
"1.	c #CCA686",
126
"2.	c #CAA587",
127
"3.	c #BE9271",
128
"4.	c #AF7B4F",
129
"5.	c #B3825C",
130
"6.	c #DEA67C",
131
"7.	c #CF9A70",
132
"8.	c #CB7533",
133
"9.	c #CF8A56",
134
"0.	c #A97C5A",
135
"a.	c #B48D6D",
136
"b.	c #C49774",
137
"c.	c #C69C7C",
138
"d.	c #BF9474",
139
"e.	c #BD8B65",
140
"f.	c #B4825D",
141
"g.	c #DBB091",
142
"h.	c #E0B797",
143
"i.	c #D59E76",
144
"j.	c #CF8E5F",
145
"k.	c #D4976B",
146
"l.	c #D2A989",
147
"m.	c #BDA188",
148
"n.	c #C0926A",
149
"o.	c #C39A78",
150
"p.	c #C19A7C",
151
"q.	c #BE9577",
152
"r.	c #AE8564",
153
"                                                                    ",
154
"                                                                    ",
155
"        . + @ # $       % & * = -               ; ; ;               ",
156
"        > , ' ) ! ~ {   ] ^ - / (             ; _ _ _ ;             ",
157
"        : < [ } | 1 2 3 4 5 6 7 8         _ ; _       _ ; _         ",
158
"        9 0 a b c d e   f g h i           _ ; _       _ ; _         ",
159
"        j k l m n o p   q r s t           _ ; _       _ ; _         ",
160
"        u v w x y z A   B C D E F       _ _ _ _ _ _ _ _ _ _ _       ",
161
"        G H I J K L     M N O P Q       _ ; ; ; ; ; ; ; ; ; _       ",
162
"        R S T U V W X   Y Z `  .        _ ;               ; _       ",
163
"        ..+.@.  #.$.%.&.*.=.-.          _ ; ; ; ; ; ; ; ; ; _       ",
164
"        ;.>.,.  '.).!.~.{.].^.          _ ;               ; _       ",
165
"        /.(._.:.<.[.}.|.1.2.3.4.5.      _ ; ; ; ; ; ; ; ; ; _       ",
166
"        6.7.<.8.9.0.a.  b.c.d.e.f.      _ _ _ _ _ _ _ _ _ _ _       ",
167
"        g.h.i.j.k.l.m.  n.o.p.q.r.                                  ",
168
"                                                                    ",
169
"                                                                    "};
(-)xqf-1.0.5/src/xqf-ui.c (-2 / +2 lines)
Lines 77-86 Link Here
77
    sort_mode: { SORT_SERVER_TO, -1 }
77
    sort_mode: { SORT_SERVER_TO, -1 }
78
  },
78
  },
79
  {
79
  {
80
    name:      N_("Priv"),
80
    name:      N_("Priv/PB/BE"),
81
    width:     35,
81
    width:     35,
82
    justify:   GTK_JUSTIFY_RIGHT,
82
    justify:   GTK_JUSTIFY_RIGHT,
83
    sort_mode: { SORT_SERVER_PRIVATE, SORT_SERVER_ANTICHEAT, -1 },
83
    sort_mode: { SORT_SERVER_PRIVATE, SORT_SERVER_ANTICHEAT, SORT_SERVER_BATTLEYE, -1 },
84
    // Translator: "PunkBuster"
84
    // Translator: "PunkBuster"
85
    sort_name: { NULL, N_("PB") },
85
    sort_name: { NULL, N_("PB") },
86
  },
86
  },
(-)xqf-1.0.5/src/xqf.c (-4 / +6 lines)
Lines 473-484 Link Here
473
  gtk_widget_set_sensitive (refresh_menu_item, sens);
473
  gtk_widget_set_sensitive (refresh_menu_item, sens);
474
  gtk_widget_set_sensitive (view_refresh_menu_item, sens);
474
  gtk_widget_set_sensitive (view_refresh_menu_item, sens);
475
475
476
  gtk_widget_set_state (refresh_button, GTK_STATE_NORMAL);
477
  gtk_widget_set_sensitive (refresh_button, sens);
478
479
  gtk_widget_set_sensitive (view_hostnames_menu_item, sens);
476
  gtk_widget_set_sensitive (view_hostnames_menu_item, sens);
480
  gtk_widget_set_sensitive (view_defport_menu_item, sens);
477
  gtk_widget_set_sensitive (view_defport_menu_item, sens);
481
478
479
  sens = ((!stat_process && (server_clist->rows > 0) && !default_refresh_non_visible) || (!stat_process && cur_server_list && default_refresh_non_visible));
480
481
  gtk_widget_set_state (refresh_button, GTK_STATE_NORMAL);
482
  gtk_widget_set_sensitive (refresh_button, sens);
483
482
  sens = (!stat_process && masters_to_update);
484
  sens = (!stat_process && masters_to_update);
483
485
484
  gtk_widget_set_sensitive (view_update_menu_item, sens);
486
  gtk_widget_set_sensitive (view_update_menu_item, sens);
Lines 3052-3058 Link Here
3052
  gtk_widget_show (pixmap);
3054
  gtk_widget_show (pixmap);
3053
3055
3054
  refresh_button = gtk_toolbar_append_item (GTK_TOOLBAR (main_toolbar), 
3056
  refresh_button = gtk_toolbar_append_item (GTK_TOOLBAR (main_toolbar), 
3055
                   _("Refresh"), _("Refresh current list"), NULL,
3057
                   _("Refresh"), _("Refresh listing"), NULL,
3056
                   pixmap,
3058
                   pixmap,
3057
		   GTK_SIGNAL_FUNC (refresh_callback), NULL);
3059
		   GTK_SIGNAL_FUNC (refresh_callback), NULL);
3058
3060
(-)xqf-1.0.5/src/xqf.h (+1 lines)
Lines 85-90 Link Here
85
  SERVER_SP_PASSWORD =	0x020,
85
  SERVER_SP_PASSWORD =	0x020,
86
  SERVER_SPECTATE =	0x040,
86
  SERVER_SPECTATE =	0x040,
87
  SERVER_PUNKBUSTER =	0x080,
87
  SERVER_PUNKBUSTER =	0x080,
88
  SERVER_BATTLEYE =	0x200,
88
  SERVER_INCOMPATIBLE =	0x100
89
  SERVER_INCOMPATIBLE =	0x100
89
};
90
};
90
91

Return to bug 182924