@@ -731,14 +731,10 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
731731
732732 for (i = 0 ; i < n_left ; i ++ )
733733 {
734- if (i == 0 ) /* For the first button (From left to right) */
735- {
736- if (n_left > 1 ) /* Set left_left_background
737- if we have more than one button */
738- left_bg_rects [i ] = & fgeom -> left_left_background ;
739- else /* No background if we have only one single button */
740- left_bg_rects [i ] = & fgeom -> left_single_background ;
741- }
734+ if (n_left == 1 )
735+ left_bg_rects [i ] = & fgeom -> left_single_background ;
736+ else if (i == 0 )
737+ left_bg_rects [i ] = & fgeom -> left_left_background ;
742738 else if (i == (n_left - 1 ))
743739 left_bg_rects [i ] = & fgeom -> left_right_background ;
744740 else
@@ -747,14 +743,10 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
747743
748744 for (i = 0 ; i < n_right ; i ++ )
749745 {
750- if (i == (n_right - 1 )) /* For the first button (From right to left) */
751- {
752- if (n_right > 1 ) /* Set right_right_background
753- if we have more than one button */
754- right_bg_rects [i ] = & fgeom -> right_right_background ;
755- else /* No background if we have only one single button */
756- right_bg_rects [i ] = & fgeom -> right_single_background ;
757- }
746+ if (n_right == 1 )
747+ right_bg_rects [i ] = & fgeom -> right_single_background ;
748+ else if (i == (n_right - 1 ))
749+ right_bg_rects [i ] = & fgeom -> right_right_background ;
758750 else if (i == 0 )
759751 right_bg_rects [i ] = & fgeom -> right_left_background ;
760752 else
@@ -4342,6 +4334,7 @@ map_button_state (MetaButtonType button_type,
43424334
43434335 /* Map position buttons to the corresponding function */
43444336 case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND :
4337+ case META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND :
43454338 if (fgeom -> n_right_buttons > 0 )
43464339 function = fgeom -> button_layout .right_buttons [0 ];
43474340 break ;
@@ -4354,6 +4347,7 @@ map_button_state (MetaButtonType button_type,
43544347 function = fgeom -> button_layout .right_buttons [middle_bg_offset + 1 ];
43554348 break ;
43564349 case META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND :
4350+ case META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND :
43574351 if (fgeom -> n_left_buttons > 0 )
43584352 function = fgeom -> button_layout .left_buttons [0 ];
43594353 break ;
@@ -4391,10 +4385,19 @@ get_button (MetaFrameStyle *style,
43914385 parent = parent -> parent ;
43924386 }
43934387
4394- /* We fall back to middle button backgrounds if we don't
4395- * have the ones on the sides
4388+ /* We fall back to the side buttons if we don't have
4389+ * single button backgrounds, and to middle button
4390+ * backgrounds if we don't have the ones on the sides
43964391 */
43974392
4393+ if (op_list == NULL &&
4394+ type == META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND )
4395+ return get_button (style , META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND , state );
4396+
4397+ if (op_list == NULL &&
4398+ type == META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND )
4399+ return get_button (style , META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND , state );
4400+
43984401 if (op_list == NULL &&
43994402 (type == META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND ||
44004403 type == META_BUTTON_TYPE_LEFT_RIGHT_BACKGROUND ))
@@ -4470,6 +4473,10 @@ get_button_rect (MetaButtonType type,
44704473 * rect = fgeom -> left_right_background ;
44714474 break ;
44724475
4476+ case META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND :
4477+ * rect = fgeom -> left_single_background ;
4478+ break ;
4479+
44734480 case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND :
44744481 * rect = fgeom -> right_left_background ;
44754482 break ;
@@ -4482,6 +4489,10 @@ get_button_rect (MetaButtonType type,
44824489 * rect = fgeom -> right_right_background ;
44834490 break ;
44844491
4492+ case META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND :
4493+ * rect = fgeom -> right_single_background ;
4494+ break ;
4495+
44854496 case META_BUTTON_TYPE_CLOSE :
44864497 * rect = fgeom -> close_rect .visible ;
44874498 break ;
@@ -5983,12 +5994,16 @@ meta_button_type_from_string (const char *str, MetaTheme *theme)
59835994 return META_BUTTON_TYPE_LEFT_MIDDLE_BACKGROUND ;
59845995 else if (strcmp ("left_right_background" , str ) == 0 )
59855996 return META_BUTTON_TYPE_LEFT_RIGHT_BACKGROUND ;
5997+ else if (strcmp ("left_single_background" , str ) == 0 )
5998+ return META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND ;
59865999 else if (strcmp ("right_left_background" , str ) == 0 )
59876000 return META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND ;
59886001 else if (strcmp ("right_middle_background" , str ) == 0 )
59896002 return META_BUTTON_TYPE_RIGHT_MIDDLE_BACKGROUND ;
59906003 else if (strcmp ("right_right_background" , str ) == 0 )
59916004 return META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND ;
6005+ else if (strcmp ("right_single_background" , str ) == 0 )
6006+ return META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND ;
59926007 else
59936008 return META_BUTTON_TYPE_LAST ;
59946009}
@@ -6024,12 +6039,16 @@ meta_button_type_to_string (MetaButtonType type)
60246039 return "left_middle_background" ;
60256040 case META_BUTTON_TYPE_LEFT_RIGHT_BACKGROUND :
60266041 return "left_right_background" ;
6042+ case META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND :
6043+ return "left_single_background" ;
60276044 case META_BUTTON_TYPE_RIGHT_LEFT_BACKGROUND :
60286045 return "right_left_background" ;
60296046 case META_BUTTON_TYPE_RIGHT_MIDDLE_BACKGROUND :
60306047 return "right_middle_background" ;
60316048 case META_BUTTON_TYPE_RIGHT_RIGHT_BACKGROUND :
60326049 return "right_right_background" ;
6050+ case META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND :
6051+ return "right_single_background" ;
60336052 case META_BUTTON_TYPE_LAST :
60346053 break ;
60356054 }
@@ -6889,6 +6908,10 @@ meta_theme_earliest_version_with_button (MetaButtonType type)
68896908 case META_BUTTON_TYPE_UNSTICK :
68906909 return 2000 ;
68916910
6911+ case META_BUTTON_TYPE_LEFT_SINGLE_BACKGROUND :
6912+ case META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND :
6913+ return 3003 ;
6914+
68926915 default :
68936916 meta_warning ("Unknown button %d\n" , type );
68946917 return 1000 ;
0 commit comments