summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.github/workflows/build.yml281
-rw-r--r--.travis.yml3
-rw-r--r--applets/clock/clock.c17
-rw-r--r--applets/clock/clock.ui3
-rw-r--r--mate-panel/panel-menu-button.c2
5 files changed, 301 insertions, 5 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 00000000..ba2e0155
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,281 @@
+name: CI Build
+
+on:
+ push:
+ branches:
+ - master
+ pull_request:
+ branches:
+ - master
+ workflow_dispatch:
+
+# cancel already running builds of the same branch or pull request
+concurrency:
+ group: ci-${{ github.workflow }}-${{ github.event.pull_request.number || github.head_ref || github.sha }}
+ cancel-in-progress: true
+
+env:
+ MATE_PANEL_DEP: 1.28.2
+ CONFIGURE_FLAGS: --enable-compile-warnings=maximum
+ CFLAGS: -g -O2 -Werror=pointer-arith -Werror=implicit-function-declaration
+ JOBS: 2
+ DEBUG: 1
+ # Useful URL: https://github.com/mate-desktop/debian-packages
+ # Useful URL: https://salsa.debian.org/debian-mate-team/mate-panel
+ DEB_LIBRARY_DEPS: |
+ libatk1.0-dev
+ libcairo2-dev
+ libdconf-dev
+ libgirepository1.0-dev
+ libglib2.0-dev
+ libgtk-3-dev
+ libgtk-layer-shell-dev
+ libice-dev
+ libmate-desktop-dev
+ libmate-menu-dev
+ libmateweather-dev
+ libpango1.0-dev
+ libsm-dev
+ libsoup2.4-dev
+ libwnck-3-dev
+ libx11-dev
+ libxrandr-dev
+ # mate-desktop dependencies
+ DEB_LIBRARY_DEPS_MATE_DESKTOP: |
+ libgirepository1.0-dev
+ DEB_BUILD_DEPS: |
+ ccache
+ autoconf-archive
+ autopoint
+ gir1.2-freedesktop
+ git
+ gobject-introspection
+ gtk-doc-tools
+ lsb-release
+ make
+ mate-common
+ meson
+ yelp-tools
+ # mate-desktop dependencies
+ DEB_BUILD_DEPS_MATE_DESKTOP: |
+ iso-codes
+ gobject-introspection
+ # TODO
+ DEB_SCAN_BUILD_DEPS: |
+ clang
+ clang-tools
+ # Useful URL: https://git.archlinux.org/svntogit/community.git/tree/mate-panel
+ ARCH_BUILD_DEPS: |
+ ccache
+ autoconf-archive
+ clang
+ gcc
+ git
+ glib2-devel
+ gobject-introspection
+ gtk-layer-shell
+ itstool
+ libcanberra
+ libmateweather
+ libsm
+ libwnck3
+ make
+ mate-common
+ mate-desktop
+ mate-menus
+ meson
+ which
+ yelp-tools
+ # mate-desktop dependencies
+ ARCH_BUILD_DEPS_MATE_DESKTOP: |
+ iso-codes
+ gobject-introspection
+
+jobs:
+ build:
+ name: Build on ${{matrix.container}} with in-process=${{matrix.in-process}} (using ${{matrix.cc}})
+ runs-on: ubuntu-latest
+ container: ${{matrix.container}}
+
+ strategy:
+ fail-fast: false # don't cancel other jobs in the matrix if one fails
+ matrix:
+ in-process: [all, none]
+ container: ['debian:testing', 'ubuntu:rolling', 'archlinux:latest']
+ cc: ['gcc']
+ cxx: ['g++']
+ include:
+ # test with clang on archlinux:latest
+ - container: 'archlinux:latest'
+ cc: 'clang'
+ cxx: 'clang++'
+ in-process: all
+ - container: 'archlinux:latest'
+ cc: 'clang'
+ cxx: 'clang++'
+ in-process: none
+
+ env:
+ # Speed up build with ccache
+ CC: ccache ${{matrix.cc}}
+ CXX: ccache ${{matrix.cxx}}
+ # root install path for the mate-desktop dependency
+ MATE_DESKTOP_INSTALL_PATH: ${{github.workspace}}/mate-desktop-install
+
+ steps:
+ # We can't *extend* the environment in 'env' directly, so use GITHUB_ENV
+ # output variable to do so.
+ - name: Setup environment
+ run: |
+ echo "PATH=${MATE_DESKTOP_INSTALL_PATH}/bin:${PATH}" >> "$GITHUB_ENV"
+ echo "PKG_CONFIG_PATH=${MATE_DESKTOP_INSTALL_PATH}/lib/pkgconfig:${PKG_CONFIG_PATH}" >> "$GITHUB_ENV"
+
+ # Debugging
+ - name: Show environment
+ run: env | sort
+ if: ${{ env.DEBUG == '1' }}
+
+ # For Debian and Ubuntu (apt-based with reasonably compatible packages)
+ - name: Install dependencies
+ if: ${{ startsWith(matrix.container, 'debian:') || startsWith(matrix.container, 'ubuntu:') }}
+ run: |
+ apt-get update -qq
+ apt-get install --assume-yes --no-install-recommends \
+ ${DEB_BUILD_DEPS} ${DEB_BUILD_DEPS_MATE_DESKTOP} \
+ ${DEB_LIBRARY_DEPS} ${DEB_LIBRARY_DEPS_MATE_DESKTOP}
+
+ # For ArchLinux
+ - name: Install dependencies
+ if: ${{ startsWith(matrix.container, 'archlinux:') }}
+ # don't upgrade, although told otherwise (see link below), because
+ # apparently in the container it doesn't quit work...
+ # https://wiki.archlinux.org/title/System_maintenance#Partial_upgrades_are_unsupported
+ run: |
+ pacman --noconfirm -Syu
+ pacman --noconfirm -S ${ARCH_BUILD_DEPS} ${ARCH_BUILD_DEPS_MATE_DESKTOP}
+
+ # Checkout the repository
+ - uses: actions/checkout@v3
+ with:
+ path: mate-panel
+ submodules: true
+
+ # Setup ccache cache
+ - name: ccache
+ uses: hendrikmuhs/[email protected]
+ with:
+ key: ${{ github.job }}-${{ matrix.container }}-${{ matrix.cc }}
+
+ # Cache the build of the mate-desktop dependency
+ - name: Cache mate-desktop v${{env.MATE_PANEL_DEP}} dependency
+ uses: actions/cache@v3
+ id: cache-mate-desktop
+ with:
+ path: ${{env.MATE_DESKTOP_INSTALL_PATH}}
+ # We try and be as specific as possible not to use the wrongly cached
+ # build, as this is a *binary*.
+ key: ${{runner.os}}-${{runner.arch}}-${{matrix.container}}-build-mate-desktop-${{env.MATE_PANEL_DEP}}
+
+ # Checkout mate-desktop dep, if not already cached
+ - name: Checkout mate-desktop v${{env.MATE_PANEL_DEP}}
+ uses: actions/checkout@v3
+ if: ${{ steps.cache-mate-desktop.outputs.cache-hit != 'true' }}
+ with:
+ repository: mate-desktop/mate-desktop
+ ref: v${{env.MATE_PANEL_DEP}}
+ path: mate-desktop
+ submodules: true
+
+ # Build and install mate-desktop dep, if not already cached
+ - name: Install mate-desktop v${{env.MATE_PANEL_DEP}}
+ if: ${{ steps.cache-mate-desktop.outputs.cache-hit != 'true' }}
+ run: |
+ cd mate-desktop
+ NOCONFIGURE=1 ./autogen.sh
+ { ./configure --prefix="${MATE_DESKTOP_INSTALL_PATH}" || { cat config.log; exit 1; } ; }
+ make -j ${{ env.JOBS }}
+ make -j ${{ env.JOBS }} install
+
+ # Follows regular mate-panel build and test steps
+
+ - name: Configure
+ run: |
+ cd mate-panel
+ NOCONFIGURE=1 ./autogen.sh
+ { ./configure ${CONFIGURE_FLAGS} --with-in-process-applets=${{matrix.in-process}} || { cat config.log; exit 1; } ; }
+
+ - name: Build
+ run: make -C mate-panel -j ${{ env.JOBS }}
+
+ - name: Run Tests
+ run: make -C mate-panel -j ${{ env.JOBS }} check
+
+ - name: Run distcheck
+ # We only run distcheck on one container, because it takes time and
+ # doesn't seem so useful to repeat everywhere -- it mostly checks the
+ # build system itself, rather than the build.
+ if: ${{ startsWith(matrix.container, 'debian:') }}
+ run: make -C mate-panel -j ${{ env.JOBS }} distcheck
+
+ # Do we need the real build for cppcheck run? I don't think so
+ cppcheck:
+ name: Run cppcheck
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v3
+ with:
+ submodules: true
+
+ # Install code dependencies so that cppcheck has more info
+ - name: Install dependencies
+ run: |
+ sudo apt-get update -qq
+ sudo apt-get install --assume-yes --no-install-recommends \
+ cppcheck ${DEB_LIBRARY_DEPS} ${DEB_LIBRARY_DEPS_MATE_DESKTOP}
+
+ # - define relevant configuration I can think of
+ # - X11-related stuff
+ # - Wayland-related stuff
+ # - in-process for Wayland
+ # - optional features
+ # - _Noreturn: this is to avoid false positive with functions that
+ # don't return, like g_assert(false). Here, we rely on G_NORETURN
+ # (GLib 2.68+) using _Noreturn C11 attribute if __STDC_VERSION__ is
+ # high enough (cppcheck sets it for us in newer versions, but not on
+ # here yet); but the version of cppcheck we run on don't know about
+ # the C11 attribute, so map it to the GCC one it does know.
+ # This is a tad over-specific, but it removes some spurious warnings,
+ # and defining e.g. __GNUC__=12 is simpler, but is a *lot* slower
+ # (more than 3 times slower), and doesn't seem to yield other
+ # benefits for the moment.
+ # - -I flags from pkg-config (grepped from configure.ac)
+ # - ignore non-source directories
+ - name: cppcheck
+ env:
+ checks: warning,style,performance,portability,information,missingInclude
+ defines: >
+ -DHAVE_X11 -DHAVE_RANDR
+ -DHAVE_WAYLAND
+ -DCLOCK_INPROCESS -DFISH_INPROCESS -DNOTIFICATION_AREA_INPROCESS -DWNCKLET_INPROCESS
+ -DHAVE_WINDOW_PREVIEWS
+ -DHAVE_LANGINFO_H -DHAVE_NL_LANGINFO
+ -DGETTEXT_PACKAGE="mate-panel"
+ -D__STDC_VERSION__=201112 -D_Noreturn=__attribute__((__noreturn__))
+ packages: >
+ gdk-pixbuf-2.0
+ gio-unix-2.0
+ gmodule-2.0
+ gtk+-3.0
+ ice
+ libwnck-3.0
+ mate-desktop-2.0
+ sm
+ run: |
+ cppcheck --enable="$checks" \
+ -j $JOBS \
+ $defines \
+ $(pkg-config --cflags-only-I $packages) \
+ -i gtk-layer-shell-build \
+ -i mate-panel/mate-submodules/ \
+ .
diff --git a/.travis.yml b/.travis.yml
index c13c5b8a..12de5f7c 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -43,6 +43,7 @@ notifications:
before_deploy:
- yes | gem update --system --force
- gem install bundler
+ - gem install faraday-net_http -v '3.3.0' # Avoid faraday version problem
- gem install uri
- gem install logger
@@ -80,6 +81,6 @@ after_success:
env:
# - DISTRO="archlinux:latest"
- - DISTRO="debian:testing"
+# - DISTRO="debian:testing"
- DISTRO="fedora:latest"
# - DISTRO="ubuntu:rolling"
diff --git a/applets/clock/clock.c b/applets/clock/clock.c
index e823d37c..fee7edf2 100644
--- a/applets/clock/clock.c
+++ b/applets/clock/clock.c
@@ -1248,6 +1248,7 @@ location_tile_need_clock_format_cb(ClockLocationTile *tile, gpointer data)
static void
create_cities_section (ClockData *cd)
{
+ GtkWidget *cities_box;
GSList *node;
GSList *cities;
GSList *l;
@@ -1261,8 +1262,16 @@ create_cities_section (ClockData *cd)
g_slist_free (cd->location_tiles);
cd->location_tiles = NULL;
- cd->cities_section = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
- gtk_container_set_border_width (GTK_CONTAINER (cd->cities_section), 0);
+ cd->cities_section = gtk_scrolled_window_new (NULL, NULL);
+ gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (cd->cities_section),
+ GTK_POLICY_NEVER,
+ GTK_POLICY_AUTOMATIC);
+ gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (cd->cities_section),
+ GTK_SHADOW_NONE);
+ gtk_scrolled_window_set_propagate_natural_height (GTK_SCROLLED_WINDOW (cd->cities_section),
+ TRUE);
+
+ cities_box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
cities = cd->locations;
if (g_slist_length (cities) == 0) {
@@ -1284,7 +1293,7 @@ create_cities_section (ClockData *cd)
g_signal_connect (city, "need-clock-format",
G_CALLBACK (location_tile_need_clock_format_cb), cd);
- gtk_box_pack_start (GTK_BOX (cd->cities_section),
+ gtk_box_pack_start (GTK_BOX (cities_box),
GTK_WIDGET (city),
FALSE, FALSE, 0);
@@ -1295,6 +1304,8 @@ create_cities_section (ClockData *cd)
g_slist_free (node);
+ gtk_container_add (GTK_CONTAINER (cd->cities_section), cities_box);
+
gtk_box_pack_end (GTK_BOX (cd->clock_vbox),
cd->cities_section, FALSE, FALSE, 0);
diff --git a/applets/clock/clock.ui b/applets/clock/clock.ui
index fb62507c..b4c4f1b8 100644
--- a/applets/clock/clock.ui
+++ b/applets/clock/clock.ui
@@ -606,8 +606,9 @@
<object class="GtkScrolledWindow" id="scrolledwindow10">
<property name="visible">True</property>
<property name="can-focus">True</property>
+ <property name="expand">True</property>
<property name="hscrollbar-policy">never</property>
- <property name="vscrollbar-policy">never</property>
+ <property name="vscrollbar-policy">automatic</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="cities_list">
diff --git a/mate-panel/panel-menu-button.c b/mate-panel/panel-menu-button.c
index 92925fd8..e65a99d6 100644
--- a/mate-panel/panel-menu-button.c
+++ b/mate-panel/panel-menu-button.c
@@ -694,6 +694,8 @@ panel_menu_button_load (const char *menu_path,
return;
}
+ gtk_widget_set_name (GTK_WIDGET (button), "mate-panel-main-menu-button");
+
button->priv->applet_id = g_strdup (info->id);
mate_panel_applet_add_callback (info, "help", "help-browser", _("_Help"), NULL);