@@ -65,9 +65,6 @@ public class Display.DisplayWidget : Gtk.Box {
6565 private Gtk . ComboBox resolution_combobox;
6666 private Gtk . TreeStore resolution_tree_store;
6767
68- private Gtk . ComboBox refresh_combobox;
69- private Gtk . ListStore refresh_list_store;
70-
7168 private Gtk . DropDown scale_drop_down;
7269
7370 private int real_width = 0 ;
@@ -80,12 +77,6 @@ public class Display.DisplayWidget : Gtk.Box {
8077 TOTAL
8178 }
8279
83- private enum RefreshColumns {
84- NAME ,
85- VALUE ,
86- TOTAL
87- }
88-
8980 public DisplayWidget (Display .VirtualMonitor virtual_monitor , string bg_color , string text_color ) {
9081 Object (
9182 virtual_monitor: virtual_monitor,
@@ -145,20 +136,17 @@ public class Display.DisplayWidget : Gtk.Box {
145136 mnemonic_widget = rotation_drop_down
146137 };
147138
148- refresh_list_store = new Gtk .ListStore (RefreshColumns . TOTAL , typeof (string ), typeof (Display . MonitorMode ));
149- refresh_combobox = new Gtk .ComboBox .with_model (refresh_list_store) {
139+ var refresh_drop_down = new Gtk .DropDown (virtual_monitor. available_refresh_rates, null ) {
150140 margin_start = 12 ,
151- margin_end = 12
141+ margin_end = 12 ,
142+ factory = Utils.create_string_list_item_factory ()
152143 };
144+ virtual_monitor.available_refresh_rates.bind_property ("selected ", refresh_drop_down , "selected ", BIDIRECTIONAL | SYNC_CREATE );
153145
154146 var refresh_label = new Granite .HeaderLabel (_(" Refresh Rate" )) {
155- mnemonic_widget = refresh_combobox
147+ mnemonic_widget = refresh_drop_down
156148 };
157149
158- text_renderer = new Gtk .CellRendererText ();
159- refresh_combobox.pack_start (text_renderer , true );
160- refresh_combobox.add_attribute (text_renderer , "text ", RefreshColumns .NAME );
161-
162150 // Build resolution menu
163151 // First, get list of unique resolutions from available modes.
164152 Resolution [] resolutions = {};
@@ -238,8 +226,6 @@ public class Display.DisplayWidget : Gtk.Box {
238226
239227 resolution_combobox. sensitive = usable_resolutions > 1 ;
240228
241- populate_refresh_rates ();
242-
243229 scale_drop_down = new Gtk .DropDown .from_strings (string_scales) {
244230 margin_start = 12 ,
245231 margin_end = 12
@@ -259,7 +245,7 @@ public class Display.DisplayWidget : Gtk.Box {
259245 popover_box.append (rotation_label );
260246 popover_box.append (rotation_drop_down );
261247 popover_box.append (refresh_label );
262- popover_box.append (refresh_combobox );
248+ popover_box.append (refresh_drop_down );
263249
264250 if (!MonitorManager .get_default ().global_scale_required) {
265251 popover_box. append (scale_label);
@@ -291,12 +277,11 @@ public class Display.DisplayWidget : Gtk.Box {
291277
292278 use_switch.bind_property ("active ", resolution_combobox , "sensitive ");
293279 use_switch.bind_property ("active ", rotation_drop_down , "sensitive ");
294- use_switch.bind_property ("active ", refresh_combobox , "sensitive ");
280+ use_switch.bind_property ("active ", refresh_drop_down , "sensitive ");
295281 use_switch.bind_property ("active ", scale_drop_down , "sensitive ");
296282
297283 use_switch.notify["active"].connect (() => {
298284 if (resolution_combobox. active == - 1 ) resolution_combobox. set_active (0 );
299- if (refresh_combobox. active == - 1 ) refresh_combobox. set_active (0 );
300285
301286 if (use_switch. active) {
302287 remove_css_class (" disabled" );
@@ -334,7 +319,6 @@ public class Display.DisplayWidget : Gtk.Box {
334319 }
335320
336321 virtual_monitor. set_current_mode (new_mode);
337- populate_refresh_rates ();
338322 configuration_changed ();
339323 check_position ();
340324 });
@@ -343,26 +327,16 @@ public class Display.DisplayWidget : Gtk.Box {
343327 // Prevent breaking autohide by closing popover
344328 popover. popdown ();
345329
346- var transform = (DisplayTransform )(rotation_drop_down. selected);
347-
348330 update_transformed_style ();
349331
350332 configuration_changed ();
351333 });
352334
353- refresh_combobox.changed .connect (() => {
335+ refresh_drop_down.notify["selected"] .connect (() => {
354336 // Prevent breaking autohide by closing popover
355337 popover. popdown ();
356338
357- Value val;
358- Gtk . TreeIter iter;
359- if (refresh_combobox. get_active_iter (out iter)) {
360- refresh_list_store. get_value (iter, RefreshColumns . VALUE , out val);
361- Display . MonitorMode new_mode = (Display . MonitorMode ) val;
362- virtual_monitor. set_current_mode (new_mode);
363- configuration_changed ();
364- check_position ();
365- }
339+ configuration_changed ();
366340 });
367341
368342 virtual_monitor.notify["scale"].connect (update_selected_scale );
@@ -399,65 +373,6 @@ public class Display.DisplayWidget : Gtk.Box {
399373 }
400374 }
401375
402- private void populate_refresh_rates () {
403- refresh_list_store. clear ();
404-
405- Gtk . TreeIter iter;
406- int added = 0 ;
407- if (resolution_combobox. get_active_iter (out iter)) {
408- int active_width, active_height;
409- if (resolution_combobox. get_active_iter (out iter)) {
410- resolution_tree_store. get (iter,
411- ResolutionColumns . WIDTH , out active_width,
412- ResolutionColumns . HEIGHT , out active_height
413- );
414- } else {
415- return ;
416- }
417-
418- double [] frequencies = {};
419- bool refresh_set = false ;
420- foreach (var mode in virtual_monitor. get_available_modes ()) {
421- if (mode. width != active_width || mode. height != active_height) {
422- continue ;
423- }
424-
425- if (mode. frequency in frequencies) {
426- continue ;
427- }
428-
429- bool freq_already_added = false ;
430- foreach (var freq in frequencies) {
431- if ((mode. frequency - freq). abs () < 1 ) {
432- freq_already_added = true ;
433- break ;
434- }
435- }
436-
437- if (freq_already_added) {
438- continue ;
439- }
440-
441- frequencies + = mode. frequency;
442-
443- var freq_name = _(" %g Hz" ). printf (Math . roundf ((float )mode. frequency));
444- refresh_list_store. append (out iter);
445- refresh_list_store. set (iter, ResolutionColumns . NAME , freq_name, RefreshColumns . VALUE , mode);
446- added++ ;
447- if (mode. is_current) {
448- refresh_combobox. set_active_iter (iter);
449- refresh_set = true ;
450- }
451- }
452-
453- if (! refresh_set) {
454- refresh_combobox. set_active (0 );
455- }
456- }
457-
458- refresh_combobox. sensitive = added > 1 ;
459- }
460-
461376 private void on_monitor_modes_changed () {
462377 set_active_resolution_from_current_mode ();
463378 }
0 commit comments