Skip to content

Commit c49f361

Browse files
Alberts Muktupāvelsvkareh
Alberts Muktupāvels
authored andcommitted
add support for app-menu button in theme
Add app-menu button support in themes. This is done only to support metacity theme format 3.5 version. Marco will not show this button! Based on metacity commit: https://gitlab.gnome.org/GNOME/metacity/commit/6a2cc159
1 parent cb9a1be commit c49f361

File tree

7 files changed

+76
-18
lines changed

7 files changed

+76
-18
lines changed

src/core/prefs.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1267,6 +1267,8 @@ button_function_from_string (const char *str)
12671267

12681268
if (strcmp (str, "menu") == 0)
12691269
return META_BUTTON_FUNCTION_MENU;
1270+
else if (strcmp (str, "appmenu") == 0)
1271+
return META_BUTTON_FUNCTION_APPMENU;
12701272
else if (strcmp (str, "minimize") == 0)
12711273
return META_BUTTON_FUNCTION_MINIMIZE;
12721274
else if (strcmp (str, "maximize") == 0)

src/include/common.h

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,22 @@ typedef enum
3535
{
3636
META_FRAME_ALLOWS_DELETE = 1 << 0,
3737
META_FRAME_ALLOWS_MENU = 1 << 1,
38-
META_FRAME_ALLOWS_MINIMIZE = 1 << 2,
39-
META_FRAME_ALLOWS_MAXIMIZE = 1 << 3,
40-
META_FRAME_ALLOWS_VERTICAL_RESIZE = 1 << 4,
41-
META_FRAME_ALLOWS_HORIZONTAL_RESIZE = 1 << 5,
42-
META_FRAME_HAS_FOCUS = 1 << 6,
43-
META_FRAME_SHADED = 1 << 7,
44-
META_FRAME_STUCK = 1 << 8,
45-
META_FRAME_MAXIMIZED = 1 << 9,
46-
META_FRAME_ALLOWS_SHADE = 1 << 10,
47-
META_FRAME_ALLOWS_MOVE = 1 << 11,
48-
META_FRAME_FULLSCREEN = 1 << 12,
49-
META_FRAME_IS_FLASHING = 1 << 13,
50-
META_FRAME_ABOVE = 1 << 14,
51-
META_FRAME_TILED_LEFT = 1 << 15,
52-
META_FRAME_TILED_RIGHT = 1 << 16
38+
META_FRAME_ALLOWS_APPMENU = 1 << 2,
39+
META_FRAME_ALLOWS_MINIMIZE = 1 << 3,
40+
META_FRAME_ALLOWS_MAXIMIZE = 1 << 4,
41+
META_FRAME_ALLOWS_VERTICAL_RESIZE = 1 << 5,
42+
META_FRAME_ALLOWS_HORIZONTAL_RESIZE = 1 << 6,
43+
META_FRAME_HAS_FOCUS = 1 << 7,
44+
META_FRAME_SHADED = 1 << 8,
45+
META_FRAME_STUCK = 1 << 9,
46+
META_FRAME_MAXIMIZED = 1 << 10,
47+
META_FRAME_ALLOWS_SHADE = 1 << 11,
48+
META_FRAME_ALLOWS_MOVE = 1 << 12,
49+
META_FRAME_FULLSCREEN = 1 << 13,
50+
META_FRAME_IS_FLASHING = 1 << 14,
51+
META_FRAME_ABOVE = 1 << 15,
52+
META_FRAME_TILED_LEFT = 1 << 16,
53+
META_FRAME_TILED_RIGHT = 1 << 17
5354
} MetaFrameFlags;
5455

5556
typedef enum
@@ -143,6 +144,7 @@ typedef enum
143144
META_GRAB_OP_CLICKING_UNMAXIMIZE_HORIZONTAL,
144145
META_GRAB_OP_CLICKING_DELETE,
145146
META_GRAB_OP_CLICKING_MENU,
147+
META_GRAB_OP_CLICKING_APPMENU,
146148
META_GRAB_OP_CLICKING_SHADE,
147149
META_GRAB_OP_CLICKING_UNSHADE,
148150
META_GRAB_OP_CLICKING_ABOVE,
@@ -271,6 +273,7 @@ typedef enum
271273
typedef enum
272274
{
273275
META_BUTTON_FUNCTION_MENU,
276+
META_BUTTON_FUNCTION_APPMENU,
274277
META_BUTTON_FUNCTION_MINIMIZE,
275278
META_BUTTON_FUNCTION_MAXIMIZE,
276279
META_BUTTON_FUNCTION_CLOSE,

src/ui/frames.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1116,6 +1116,9 @@ show_tip_now (MetaFrames *frames)
11161116
case META_FRAME_CONTROL_MENU:
11171117
tiptext = _("Window Menu");
11181118
break;
1119+
case META_FRAME_CONTROL_APPMENU:
1120+
tiptext = _("Window App Menu");
1121+
break;
11191122
case META_FRAME_CONTROL_MINIMIZE:
11201123
tiptext = _("Minimize Window");
11211124
break;
@@ -1466,6 +1469,9 @@ meta_frames_button_press_event (GtkWidget *widget,
14661469
case META_FRAME_CONTROL_MENU:
14671470
op = META_GRAB_OP_CLICKING_MENU;
14681471
break;
1472+
case META_FRAME_CONTROL_APPMENU:
1473+
op = META_GRAB_OP_CLICKING_APPMENU;
1474+
break;
14691475
case META_FRAME_CONTROL_SHADE:
14701476
op = META_GRAB_OP_CLICKING_SHADE;
14711477
break;
@@ -1730,6 +1736,7 @@ meta_frames_button_release_event (GtkWidget *widget,
17301736
break;
17311737

17321738
case META_GRAB_OP_CLICKING_MENU:
1739+
case META_GRAB_OP_CLICKING_APPMENU:
17331740
meta_core_end_grab_op (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), event->time);
17341741
break;
17351742

@@ -1816,6 +1823,8 @@ meta_frames_update_prelit_control (MetaFrames *frames,
18161823
break;
18171824
case META_FRAME_CONTROL_MENU:
18181825
break;
1826+
case META_FRAME_CONTROL_APPMENU:
1827+
break;
18191828
case META_FRAME_CONTROL_MINIMIZE:
18201829
break;
18211830
case META_FRAME_CONTROL_MAXIMIZE:
@@ -1868,6 +1877,7 @@ meta_frames_update_prelit_control (MetaFrames *frames,
18681877
switch (control)
18691878
{
18701879
case META_FRAME_CONTROL_MENU:
1880+
case META_FRAME_CONTROL_APPMENU:
18711881
case META_FRAME_CONTROL_MINIMIZE:
18721882
case META_FRAME_CONTROL_MAXIMIZE:
18731883
case META_FRAME_CONTROL_DELETE:
@@ -1921,6 +1931,7 @@ meta_frames_motion_notify_event (GtkWidget *widget,
19211931
switch (grab_op)
19221932
{
19231933
case META_GRAB_OP_CLICKING_MENU:
1934+
case META_GRAB_OP_CLICKING_APPMENU:
19241935
case META_GRAB_OP_CLICKING_DELETE:
19251936
case META_GRAB_OP_CLICKING_MINIMIZE:
19261937
case META_GRAB_OP_CLICKING_MAXIMIZE:
@@ -1951,6 +1962,8 @@ meta_frames_motion_notify_event (GtkWidget *widget,
19511962
control = get_control (frames, frame, x, y);
19521963
if (! ((control == META_FRAME_CONTROL_MENU &&
19531964
grab_op == META_GRAB_OP_CLICKING_MENU) ||
1965+
(control == META_FRAME_CONTROL_APPMENU &&
1966+
grab_op == META_GRAB_OP_CLICKING_APPMENU) ||
19541967
(control == META_FRAME_CONTROL_DELETE &&
19551968
grab_op == META_GRAB_OP_CLICKING_DELETE) ||
19561969
(control == META_FRAME_CONTROL_MINIMIZE &&
@@ -2352,6 +2365,12 @@ meta_frames_paint_to_drawable (MetaFrames *frames,
23522365
else
23532366
button_states[META_BUTTON_TYPE_MENU] = META_BUTTON_STATE_PRELIGHT;
23542367
break;
2368+
case META_FRAME_CONTROL_APPMENU:
2369+
if (grab_op == META_GRAB_OP_CLICKING_MENU)
2370+
button_states[META_BUTTON_TYPE_APPMENU] = META_BUTTON_STATE_PRESSED;
2371+
else
2372+
button_states[META_BUTTON_TYPE_APPMENU] = META_BUTTON_STATE_PRELIGHT;
2373+
break;
23552374
case META_FRAME_CONTROL_MINIMIZE:
23562375
if (grab_op == META_GRAB_OP_CLICKING_MINIMIZE)
23572376
button_states[META_BUTTON_TYPE_MINIMIZE] = META_BUTTON_STATE_PRESSED;
@@ -2549,6 +2568,9 @@ control_rect (MetaFrameControl control,
25492568
case META_FRAME_CONTROL_MENU:
25502569
rect = &fgeom->menu_rect.visible;
25512570
break;
2571+
case META_FRAME_CONTROL_APPMENU:
2572+
rect = &fgeom->appmenu_rect.visible;
2573+
break;
25522574
case META_FRAME_CONTROL_MINIMIZE:
25532575
rect = &fgeom->min_rect.visible;
25542576
break;
@@ -2635,6 +2657,9 @@ get_control (MetaFrames *frames,
26352657
if (POINT_IN_RECT (x, y, fgeom.menu_rect.clickable))
26362658
return META_FRAME_CONTROL_MENU;
26372659

2660+
if (POINT_IN_RECT (x, y, fgeom.appmenu_rect.clickable))
2661+
return META_FRAME_CONTROL_APPMENU;
2662+
26382663
meta_core_get (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), frame->xwindow,
26392664
META_CORE_GET_FRAME_FLAGS, &flags,
26402665
META_CORE_GET_END);

src/ui/frames.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ typedef enum
3535
META_FRAME_CONTROL_TITLE,
3636
META_FRAME_CONTROL_DELETE,
3737
META_FRAME_CONTROL_MENU,
38+
META_FRAME_CONTROL_APPMENU,
3839
META_FRAME_CONTROL_MINIMIZE,
3940
META_FRAME_CONTROL_MAXIMIZE,
4041
META_FRAME_CONTROL_UNMAXIMIZE,

src/ui/theme-parser.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838
* look out for.
3939
*/
4040
#define THEME_MAJOR_VERSION 3
41-
#define THEME_MINOR_VERSION 4
41+
#define THEME_MINOR_VERSION 5
4242
#define THEME_VERSION (1000 * THEME_MAJOR_VERSION + THEME_MINOR_VERSION)
4343

4444
#define MARCO_THEME_FILENAME_FORMAT "metacity-theme-%d.xml"

src/ui/theme.c

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,8 @@ map_button_function_to_type (MetaButtonFunction function)
468468
return META_BUTTON_TYPE_UNSTICK;
469469
case META_BUTTON_FUNCTION_MENU:
470470
return META_BUTTON_TYPE_MENU;
471+
case META_BUTTON_FUNCTION_APPMENU:
472+
return META_BUTTON_TYPE_APPMENU;
471473
case META_BUTTON_FUNCTION_MINIMIZE:
472474
return META_BUTTON_TYPE_MINIMIZE;
473475
case META_BUTTON_FUNCTION_MAXIMIZE:
@@ -536,6 +538,11 @@ rect_for_function (MetaFrameGeometry *fgeom,
536538
return &fgeom->menu_rect;
537539
else
538540
return NULL;
541+
case META_BUTTON_FUNCTION_APPMENU:
542+
if (flags & META_FRAME_ALLOWS_APPMENU)
543+
return &fgeom->appmenu_rect;
544+
else
545+
return NULL;
539546
case META_BUTTON_FUNCTION_MINIMIZE:
540547
if (flags & META_FRAME_ALLOWS_MINIMIZE)
541548
return &fgeom->min_rect;
@@ -834,6 +841,12 @@ meta_frame_layout_calc_geometry (const MetaFrameLayout *layout,
834841
else if (strip_button (left_func_rects, left_bg_rects,
835842
&n_left, &fgeom->menu_rect))
836843
continue;
844+
else if (strip_button (right_func_rects, right_bg_rects,
845+
&n_right, &fgeom->appmenu_rect))
846+
continue;
847+
else if (strip_button (left_func_rects, left_bg_rects,
848+
&n_left, &fgeom->appmenu_rect))
849+
continue;
837850
else
838851
{
839852
meta_bug ("Could not find a button to strip. n_left = %d n_right = %d\n",
@@ -4412,14 +4425,15 @@ map_button_state (MetaButtonType button_type,
44124425

44134426
switch (button_type)
44144427
{
4415-
/* First hande functions, which map directly */
4428+
/* First handle functions, which map directly */
44164429
case META_BUTTON_TYPE_SHADE:
44174430
case META_BUTTON_TYPE_ABOVE:
44184431
case META_BUTTON_TYPE_STICK:
44194432
case META_BUTTON_TYPE_UNSHADE:
44204433
case META_BUTTON_TYPE_UNABOVE:
44214434
case META_BUTTON_TYPE_UNSTICK:
44224435
case META_BUTTON_TYPE_MENU:
4436+
case META_BUTTON_TYPE_APPMENU:
44234437
case META_BUTTON_TYPE_MINIMIZE:
44244438
case META_BUTTON_TYPE_MAXIMIZE:
44254439
case META_BUTTON_TYPE_CLOSE:
@@ -4626,6 +4640,10 @@ get_button_rect (MetaButtonType type,
46264640
*rect = fgeom->menu_rect.visible;
46274641
break;
46284642

4643+
case META_BUTTON_TYPE_APPMENU:
4644+
*rect = fgeom->appmenu_rect.visible;
4645+
break;
4646+
46294647
case META_BUTTON_TYPE_LAST:
46304648
g_assert_not_reached ();
46314649
break;
@@ -6081,6 +6099,8 @@ meta_button_type_from_string (const char *str, MetaTheme *theme)
60816099
return META_BUTTON_TYPE_MINIMIZE;
60826100
else if (strcmp ("menu", str) == 0)
60836101
return META_BUTTON_TYPE_MENU;
6102+
else if (strcmp ("appmenu", str) == 0)
6103+
return META_BUTTON_TYPE_APPMENU;
60846104
else if (strcmp ("left_left_background", str) == 0)
60856105
return META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND;
60866106
else if (strcmp ("left_middle_background", str) == 0)
@@ -6124,8 +6144,10 @@ meta_button_type_to_string (MetaButtonType type)
61246144
return "unabove";
61256145
case META_BUTTON_TYPE_UNSTICK:
61266146
return "unstick";
6127-
case META_BUTTON_TYPE_MENU:
6147+
case META_BUTTON_TYPE_MENU:
61286148
return "menu";
6149+
case META_BUTTON_TYPE_APPMENU:
6150+
return "appmenu";
61296151
case META_BUTTON_TYPE_LEFT_LEFT_BACKGROUND:
61306152
return "left_left_background";
61316153
case META_BUTTON_TYPE_LEFT_MIDDLE_BACKGROUND:
@@ -7005,6 +7027,9 @@ meta_theme_earliest_version_with_button (MetaButtonType type)
70057027
case META_BUTTON_TYPE_RIGHT_SINGLE_BACKGROUND:
70067028
return 3003;
70077029

7030+
case META_BUTTON_TYPE_APPMENU:
7031+
return 3005;
7032+
70087033
default:
70097034
meta_warning("Unknown button %d\n", type);
70107035
return 1000;

src/ui/theme.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -192,6 +192,7 @@ struct _MetaFrameGeometry
192192
MetaButtonSpace max_rect;
193193
MetaButtonSpace min_rect;
194194
MetaButtonSpace menu_rect;
195+
MetaButtonSpace appmenu_rect;
195196
MetaButtonSpace shade_rect;
196197
MetaButtonSpace above_rect;
197198
MetaButtonSpace stick_rect;
@@ -609,6 +610,7 @@ typedef enum
609610
META_BUTTON_TYPE_MAXIMIZE,
610611
META_BUTTON_TYPE_MINIMIZE,
611612
META_BUTTON_TYPE_MENU,
613+
META_BUTTON_TYPE_APPMENU,
612614
META_BUTTON_TYPE_SHADE,
613615
META_BUTTON_TYPE_ABOVE,
614616
META_BUTTON_TYPE_STICK,

0 commit comments

Comments
 (0)