diff options
| -rw-r--r-- | applets/clock/clock.c | 19 | ||||
| -rw-r--r-- | applets/wncklet/wayland-backend.c | 17 | ||||
| -rw-r--r-- | configure.ac | 2 | ||||
| -rw-r--r-- | libmate-panel-applet/mate-panel-applet.c | 28 | ||||
| -rw-r--r-- | libmate-panel-applet/mate-panel-applet.h | 4 |
5 files changed, 67 insertions, 3 deletions
diff --git a/applets/clock/clock.c b/applets/clock/clock.c index 2e26b39f..bc01b290 100644 --- a/applets/clock/clock.c +++ b/applets/clock/clock.c @@ -1436,6 +1436,21 @@ toggle_calendar (GtkWidget *button, } static gboolean +clock_applet_activate (MatePanelApplet *applet, + const gchar *action, + guint32 timestamp, + ClockData *cd) +{ + if (g_strcmp0 (action, "toggle-calendar") == 0) { + /* Toggle the button state first, then activate popup */ + gboolean current_state = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (cd->panel_button)); + gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (cd->panel_button), !current_state); + return TRUE; + } + return FALSE; +} + +static gboolean do_not_eat_button_press (GtkWidget *widget, GdkEventButton *event) { @@ -2739,6 +2754,10 @@ fill_clock_applet (MatePanelApplet *applet) G_CALLBACK (applet_change_orient), cd); + g_signal_connect (cd->applet, "activate", + G_CALLBACK (clock_applet_activate), + cd); + g_signal_connect (cd->panel_button, "size-allocate", G_CALLBACK (panel_button_change_pixel_size), cd); diff --git a/applets/wncklet/wayland-backend.c b/applets/wncklet/wayland-backend.c index 001149e7..30469894 100644 --- a/applets/wncklet/wayland-backend.c +++ b/applets/wncklet/wayland-backend.c @@ -68,6 +68,8 @@ typedef struct gboolean fullscreen; } ToplevelTask; +static int tasklist_invocations = 0; + static const char *tasklist_manager_key = "tasklist_manager"; static const char *toplevel_task_key = "toplevel_task"; @@ -497,7 +499,12 @@ foreign_toplevel_handle_closed (void *data, outer_box = gtk_widget_get_parent (GTK_WIDGET (task->button)); gtk_widget_destroy (task->button); buttons = buttons -1; - real_buttons = buttons / 2; + + if (tasklist_invocations > 1) + real_buttons = buttons / 2; + + else + real_buttons = buttons; if (real_buttons == 0) return; @@ -704,7 +711,11 @@ toplevel_task_new (TasklistManager *tasklist, struct zwlr_foreign_toplevel_handl if (tasklist_width <= 2) tasklist_width = panel_width / 3; - real_buttons = MAX ((buttons / 2), 1); + if (tasklist_invocations > 1) + real_buttons = MAX ((buttons / 2), 1); + + else + real_buttons = MAX ((buttons), 1); /*always allow at least three buttons to fit without adjustment *so short window lists don't overflow @@ -738,6 +749,8 @@ wayland_tasklist_new () { wayland_tasklist_init_if_needed (); TasklistManager *tasklist = tasklist_manager_new (); + + tasklist_invocations = tasklist_invocations + 1; if (!tasklist) return gtk_label_new ("Shell does not support WLR Foreign Toplevel Control"); return tasklist->outer_box; diff --git a/configure.ac b/configure.ac index f610cc46..92dd8aae 100644 --- a/configure.ac +++ b/configure.ac @@ -15,7 +15,7 @@ MATE_COMMON_INIT # change to C+1:0:0 # - If the interface is the same as the previous version, change to C:R+1:A -LIB_MATE_PANEL_APPLET_LT_VERSION=1:1:0 +LIB_MATE_PANEL_APPLET_LT_VERSION=2:0:0 AC_SUBST(LIB_MATE_PANEL_APPLET_LT_VERSION) AM_MAINTAINER_MODE diff --git a/libmate-panel-applet/mate-panel-applet.c b/libmate-panel-applet/mate-panel-applet.c index 897f1726..a4118165 100644 --- a/libmate-panel-applet/mate-panel-applet.c +++ b/libmate-panel-applet/mate-panel-applet.c @@ -94,6 +94,7 @@ enum { CHANGE_SIZE, CHANGE_BACKGROUND, MOVE_FOCUS_OUT_OF_APPLET, + ACTIVATE, LAST_SIGNAL }; @@ -2150,6 +2151,19 @@ mate_panel_applet_class_init (MatePanelAppletClass *klass) 1, GTK_TYPE_DIRECTION_TYPE); + mate_panel_applet_signals [ACTIVATE] = + g_signal_new ("activate", + G_TYPE_FROM_CLASS (klass), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET (MatePanelAppletClass, activate), + g_signal_accumulator_true_handled, + NULL, + NULL, + G_TYPE_BOOLEAN, + 2, + G_TYPE_STRING, + G_TYPE_UINT); + binding_set = gtk_binding_set_by_class (gobject_class); add_tab_bindings (binding_set, 0, GTK_DIR_TAB_FORWARD); add_tab_bindings (binding_set, GDK_SHIFT_MASK, GTK_DIR_TAB_BACKWARD); @@ -2213,6 +2227,15 @@ method_call_cb (GDBusConnection *connection, gdk_event_free (event); g_dbus_method_invocation_return_value (invocation, NULL); + } else if (g_strcmp0 (method_name, "Activate") == 0) { + const gchar *action; + guint32 timestamp; + gboolean success = FALSE; + + g_variant_get (parameters, "(&su)", &action, ×tamp); + + g_signal_emit_by_name (applet, "activate", action, timestamp, &success); + g_dbus_method_invocation_return_value (invocation, g_variant_new ("(b)", success)); } } @@ -2303,6 +2326,11 @@ static const gchar introspection_xml[] = "<arg name='button' type='u' direction='in'/>" "<arg name='time' type='u' direction='in'/>" "</method>" + "<method name='Activate'>" + "<arg name='action' type='s' direction='in'/>" + "<arg name='timestamp' type='u' direction='in'/>" + "<arg name='success' type='b' direction='out'/>" + "</method>" "<property name='PrefsPath' type='s' access='readwrite'/>" "<property name='Orient' type='u' access='readwrite' />" "<property name='Size' type='u' access='readwrite'/>" diff --git a/libmate-panel-applet/mate-panel-applet.h b/libmate-panel-applet/mate-panel-applet.h index 9cc48ae8..5c8550dc 100644 --- a/libmate-panel-applet/mate-panel-applet.h +++ b/libmate-panel-applet/mate-panel-applet.h @@ -78,6 +78,10 @@ struct _MatePanelAppletClass { void (*move_focus_out_of_applet) (MatePanelApplet *frame, GtkDirectionType direction); + + gboolean (*activate) (MatePanelApplet *applet, + const gchar *action, + guint32 timestamp); }; GtkWidget* mate_panel_applet_new (void); |
