@@ -115,6 +115,13 @@ static void gpm_applet_destroy_cb (GtkWidget *widget);
115
115
* too long one will seem unresponsive. */
116
116
#define GPM_BRIGHTNESS_APPLET_SLIDER_FREQUENCY 100
117
117
118
+ /* Brightness percentage changes for each input method */
119
+ #define GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_BUTTON 1 /* plus/minus buttons in the popup */
120
+ #define GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_ARROW 1 /* arrow keys when the popup is open */
121
+ #define GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_SCROLL 5 /* scrolling over the indicator icon */
122
+ #define GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_PAGE 10 /* page up/down keys when the popup is open */
123
+
124
+
118
125
/**
119
126
* gpm_applet_get_brightness:
120
127
* Return value: Success value, or zero for failure
@@ -403,6 +410,26 @@ gpm_applet_update_popup_level (GpmBrightnessApplet *applet)
403
410
gpm_applet_update_tooltip (applet );
404
411
}
405
412
413
+ /**
414
+ * gpm_applet_adjust_brightness:
415
+ * @applet: Brightness applet instance
416
+ *
417
+ * Change brightness by a given percentage and keep the slider value in sync.
418
+ **/
419
+ static void
420
+ gpm_applet_adjust_brightness (GpmBrightnessApplet * applet , int percent )
421
+ {
422
+ if (applet -> level == -1 ) {
423
+ return ;
424
+ }
425
+ if (percent > 0 ) {
426
+ applet -> level = applet -> level <= (100 - percent ) ? applet -> level + percent : 100 ;
427
+ } else {
428
+ applet -> level = applet -> level >= - percent ? applet -> level + percent : 0 ;
429
+ }
430
+ gtk_range_set_value (GTK_RANGE (applet -> slider ), applet -> level );
431
+ }
432
+
406
433
/**
407
434
* gpm_applet_plus_cb:
408
435
* @widget: The sending widget (plus button)
@@ -413,11 +440,7 @@ gpm_applet_update_popup_level (GpmBrightnessApplet *applet)
413
440
static gboolean
414
441
gpm_applet_plus_cb (GtkWidget * w , GpmBrightnessApplet * applet )
415
442
{
416
- if (applet -> level < 100 ) {
417
- applet -> level ++ ;
418
- }
419
- applet -> call_worked = gpm_applet_set_brightness (applet );
420
- gpm_applet_update_popup_level (applet );
443
+ gpm_applet_adjust_brightness (applet , GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_BUTTON );
421
444
return TRUE;
422
445
}
423
446
@@ -431,11 +454,7 @@ gpm_applet_plus_cb (GtkWidget *w, GpmBrightnessApplet *applet)
431
454
static gboolean
432
455
gpm_applet_minus_cb (GtkWidget * w , GpmBrightnessApplet * applet )
433
456
{
434
- if (applet -> level > 0 ) {
435
- applet -> level -- ;
436
- }
437
- applet -> call_worked = gpm_applet_set_brightness (applet );
438
- gpm_applet_update_popup_level (applet );
457
+ gpm_applet_adjust_brightness (applet , - GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_BUTTON );
439
458
return TRUE;
440
459
}
441
460
@@ -487,8 +506,6 @@ gpm_applet_slide_cb (GtkWidget *w, GpmBrightnessApplet *applet)
487
506
static gboolean
488
507
gpm_applet_key_press_cb (GtkWidget * popup , GdkEventKey * event , GpmBrightnessApplet * applet )
489
508
{
490
- int i ;
491
-
492
509
switch (event -> keyval ) {
493
510
case GDK_KEY_KP_Enter :
494
511
case GDK_KEY_ISO_Enter :
@@ -508,25 +525,21 @@ gpm_applet_key_press_cb (GtkWidget *popup, GdkEventKey *event, GpmBrightnessAppl
508
525
}
509
526
break ;
510
527
case GDK_KEY_Page_Up :
511
- for (i = 0 ;i < 10 ;i ++ ) {
512
- gpm_applet_plus_cb (NULL , applet );
513
- }
528
+ gpm_applet_adjust_brightness (applet , GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_PAGE );
514
529
return TRUE;
515
530
break ;
516
531
case GDK_KEY_Left :
517
532
case GDK_KEY_Up :
518
- gpm_applet_plus_cb ( NULL , applet );
533
+ gpm_applet_adjust_brightness ( applet , GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_ARROW );
519
534
return TRUE;
520
535
break ;
521
536
case GDK_KEY_Page_Down :
522
- for (i = 0 ;i < 10 ;i ++ ) {
523
- gpm_applet_minus_cb (NULL , applet );
524
- }
537
+ gpm_applet_adjust_brightness (applet , - GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_PAGE );
525
538
return TRUE;
526
539
break ;
527
540
case GDK_KEY_Right :
528
541
case GDK_KEY_Down :
529
- gpm_applet_minus_cb ( NULL , applet );
542
+ gpm_applet_adjust_brightness ( applet , - GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_ARROW );
530
543
return TRUE;
531
544
break ;
532
545
default :
@@ -549,18 +562,11 @@ gpm_applet_key_press_cb (GtkWidget *popup, GdkEventKey *event, GpmBrightnessAppl
549
562
static gboolean
550
563
gpm_applet_scroll_cb (GpmBrightnessApplet * applet , GdkEventScroll * event )
551
564
{
552
- int i ;
553
-
554
565
if (event -> type == GDK_SCROLL ) {
555
566
if (event -> direction == GDK_SCROLL_UP ) {
556
- for (i = 0 ;i < 5 ;i ++ ) {
557
- gpm_applet_plus_cb (NULL , applet );
558
- }
559
-
567
+ gpm_applet_adjust_brightness (applet , GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_SCROLL );
560
568
} else {
561
- for (i = 0 ;i < 5 ;i ++ ) {
562
- gpm_applet_minus_cb (NULL , applet );
563
- }
569
+ gpm_applet_adjust_brightness (applet , - GPM_BRIGHTNESS_APPLET_PERCENT_CHANGE_SCROLL );
564
570
}
565
571
return TRUE;
566
572
}
@@ -710,7 +716,7 @@ gpm_applet_popup_cb (GpmBrightnessApplet *applet, GdkEventButton *event)
710
716
/* otherwise pop */
711
717
applet -> popped = TRUE;
712
718
713
- /* create a new popup (initial or if panel parameters changed) */
719
+ /* create a new popup (if panel parameters changed) */
714
720
if (applet -> popup == NULL ) {
715
721
gpm_applet_create_popup (applet );
716
722
}
@@ -1026,6 +1032,10 @@ gpm_brightness_applet_init (GpmBrightnessApplet *applet)
1026
1032
mate_panel_applet_set_flags (MATE_PANEL_APPLET (applet ), MATE_PANEL_APPLET_EXPAND_MINOR );
1027
1033
gtk_widget_set_events (GTK_WIDGET (applet ), GDK_SCROLL_MASK );
1028
1034
1035
+ /* Create popup (slider) upfront, so that we can keep it
1036
+ * up to date from scroll events before it's ever opened. */
1037
+ gpm_applet_create_popup (applet );
1038
+
1029
1039
/* show */
1030
1040
gtk_widget_show_all (GTK_WIDGET (applet ));
1031
1041
0 commit comments