mirror of
https://github.com/yuezk/GlobalProtect-openconnect.git
synced 2025-05-20 07:26:58 -04:00
Compare commits
2 Commits
69ef7f5cce
...
fix_multi_
Author | SHA1 | Date | |
---|---|---|---|
|
c70c7ee5b9 | ||
|
fe3d3df662 |
21
.github/workflows/build.yaml
vendored
21
.github/workflows/build.yaml
vendored
@@ -44,7 +44,8 @@ jobs:
|
||||
with:
|
||||
version: 9
|
||||
- name: Prepare workspace
|
||||
run: rm -rf source && mkdir source
|
||||
run: rm -rf source && mkdir -p source/artifacts
|
||||
|
||||
- name: Checkout GlobalProtect-openconnect
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
@@ -52,6 +53,7 @@ jobs:
|
||||
repository: yuezk/GlobalProtect-openconnect
|
||||
ref: ${{ github.ref }}
|
||||
path: source/gp
|
||||
|
||||
- name: Create tarball
|
||||
run: |
|
||||
cd source/gp
|
||||
@@ -60,13 +62,28 @@ jobs:
|
||||
touch SNAPSHOT
|
||||
fi
|
||||
make tarball
|
||||
|
||||
mv -v .build/tarball/*.tar.gz ../artifacts/
|
||||
|
||||
- name: Generate RPM spec file
|
||||
env:
|
||||
RELEASE_TAG: ${{ github.ref == 'refs/heads/dev' && 'snapshot' || github.ref_name }}
|
||||
run: |
|
||||
cd source/gp
|
||||
|
||||
make init-rpm \
|
||||
REVISION='1%{?dist}' \
|
||||
RPM_SOURCE=https://github.com/yuezk/GlobalProtect-openconnect/releases/download/${RELEASE_TAG}/%{name}-%{version}.tar.gz
|
||||
|
||||
mv -v .build/rpm/*.spec ../artifacts/
|
||||
|
||||
- name: Upload tarball
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: artifact-source
|
||||
if-no-files-found: error
|
||||
path: |
|
||||
source/gp/.build/tarball/*.tar.gz
|
||||
source/artifacts/*
|
||||
|
||||
tarball-offline:
|
||||
if: ${{ github.ref == 'refs/heads/dev' || startsWith(github.ref, 'refs/tags/') }}
|
||||
|
1
Cargo.lock
generated
1
Cargo.lock
generated
@@ -1599,6 +1599,7 @@ dependencies = [
|
||||
"clap-verbosity-flag",
|
||||
"dns-lookup",
|
||||
"env_logger",
|
||||
"gtk",
|
||||
"log",
|
||||
"log-reload",
|
||||
"md5",
|
||||
|
3
Makefile
3
Makefile
@@ -8,6 +8,8 @@ RUST_VERSION = 1.80
|
||||
|
||||
VERSION = $(shell $(CARGO) metadata --no-deps --format-version 1 | jq -r '.packages[0].version')
|
||||
REVISION ?= 1
|
||||
RPM_SOURCE ?= %{name}.tar.gz
|
||||
|
||||
PPA_REVISION ?= 1
|
||||
PKG_NAME = globalprotect-openconnect
|
||||
PKG = $(PKG_NAME)-$(VERSION)
|
||||
@@ -234,6 +236,7 @@ init-rpm: clean-rpm
|
||||
|
||||
sed -i "s/@VERSION@/$(VERSION)/g" .build/rpm/globalprotect-openconnect.spec
|
||||
sed -i "s/@REVISION@/$(REVISION)/g" .build/rpm/globalprotect-openconnect.spec
|
||||
sed -i "s|@SOURCE@|$(RPM_SOURCE)|g" .build/rpm/globalprotect-openconnect.spec
|
||||
sed -i "s/@OFFLINE@/$(OFFLINE)/g" .build/rpm/globalprotect-openconnect.spec
|
||||
sed -i "s/@DATE@/$(shell LC_ALL=en.US date "+%a %b %d %Y")/g" .build/rpm/globalprotect-openconnect.spec
|
||||
|
||||
|
@@ -39,6 +39,9 @@ clap-verbosity-flag = { workspace = true, optional = true }
|
||||
env_logger = { workspace = true, optional = true }
|
||||
log-reload = { version = "0.1", optional = true }
|
||||
|
||||
[target.'cfg(not(any(target_os="macos", target_os="windows")))'.dependencies]
|
||||
gtk = "0.18"
|
||||
|
||||
[features]
|
||||
tauri = ["dep:tauri"]
|
||||
clap = ["dep:clap", "dep:clap-verbosity-flag"]
|
||||
|
@@ -41,12 +41,6 @@ pub fn patch_gui_runtime_env(hidpi: bool) {
|
||||
// This is to avoid blank screen on some systems
|
||||
std::env::set_var("WEBKIT_DISABLE_COMPOSITING_MODE", "1");
|
||||
|
||||
// Workaround for https://github.com/tauri-apps/tao/issues/929
|
||||
let is_wayland = std::env::var("XDG_SESSION_TYPE").unwrap_or_default() == "wayland";
|
||||
if is_wayland {
|
||||
env::set_var("GDK_BACKEND", "x11");
|
||||
}
|
||||
|
||||
if hidpi {
|
||||
info!("Setting GDK_SCALE=2 and GDK_DPI_SCALE=0.5");
|
||||
std::env::set_var("GDK_SCALE", "2");
|
||||
|
@@ -1,26 +1,49 @@
|
||||
use std::{process::ExitStatus, time::Duration};
|
||||
|
||||
use anyhow::bail;
|
||||
use log::info;
|
||||
use tauri::WebviewWindow;
|
||||
use tokio::process::Command;
|
||||
|
||||
pub trait WindowExt {
|
||||
fn raise(&self) -> anyhow::Result<()>;
|
||||
}
|
||||
|
||||
impl WindowExt for WebviewWindow {
|
||||
#[cfg(any(target_os = "macos", target_os = "windows"))]
|
||||
fn raise(&self) -> anyhow::Result<()> {
|
||||
raise_window(self)
|
||||
self.show()?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(not(any(target_os = "macos", target_os = "windows")))]
|
||||
fn raise(&self) -> anyhow::Result<()> {
|
||||
unix::raise_window(self)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn raise_window(win: &WebviewWindow) -> anyhow::Result<()> {
|
||||
#[cfg(not(any(target_os = "macos", target_os = "windows")))]
|
||||
mod unix {
|
||||
use std::{process::ExitStatus, time::Duration};
|
||||
|
||||
use anyhow::bail;
|
||||
use gtk::{
|
||||
glib::Cast,
|
||||
traits::{EventBoxExt, GtkWindowExt, WidgetExt},
|
||||
EventBox,
|
||||
};
|
||||
use log::info;
|
||||
use tauri::WebviewWindow;
|
||||
use tokio::process::Command;
|
||||
|
||||
pub fn raise_window(win: &WebviewWindow) -> anyhow::Result<()> {
|
||||
let is_wayland = std::env::var("XDG_SESSION_TYPE").unwrap_or_default() == "wayland";
|
||||
|
||||
if is_wayland {
|
||||
win.hide()?;
|
||||
win.show()?;
|
||||
let gtk_win = win.gtk_window()?;
|
||||
if let Some(header) = gtk_win.titlebar() {
|
||||
let _ = header.downcast::<EventBox>().map(|event_box| {
|
||||
event_box.set_above_child(false);
|
||||
});
|
||||
}
|
||||
|
||||
gtk_win.hide();
|
||||
gtk_win.show_all();
|
||||
} else {
|
||||
if !win.is_visible()? {
|
||||
win.show()?;
|
||||
@@ -33,14 +56,14 @@ pub fn raise_window(win: &WebviewWindow) -> anyhow::Result<()> {
|
||||
});
|
||||
}
|
||||
|
||||
// Calling window.show() on Windows will cause the menu to be shown.
|
||||
// Calling window.show() on window object will cause the menu to be shown.
|
||||
// We need to hide it again.
|
||||
win.hide_menu()?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
async fn wmctrl_raise_window(title: &str) -> anyhow::Result<()> {
|
||||
async fn wmctrl_raise_window(title: &str) -> anyhow::Result<()> {
|
||||
let mut counter = 0;
|
||||
|
||||
loop {
|
||||
@@ -58,9 +81,9 @@ async fn wmctrl_raise_window(title: &str) -> anyhow::Result<()> {
|
||||
counter += 1;
|
||||
tokio::time::sleep(Duration::from_millis(100)).await;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
async fn wmctrl_try_raise_window(title: &str) -> anyhow::Result<ExitStatus> {
|
||||
async fn wmctrl_try_raise_window(title: &str) -> anyhow::Result<ExitStatus> {
|
||||
let exit_status = Command::new("wmctrl")
|
||||
.arg("-F")
|
||||
.arg("-a")
|
||||
@@ -70,4 +93,5 @@ async fn wmctrl_try_raise_window(title: &str) -> anyhow::Result<ExitStatus> {
|
||||
.await?;
|
||||
|
||||
Ok(exit_status)
|
||||
}
|
||||
}
|
||||
|
@@ -6,7 +6,7 @@ Group: Productivity/Networking/PPP
|
||||
|
||||
License: GPL-3.0
|
||||
URL: https://github.com/yuezk/GlobalProtect-openconnect
|
||||
Source: %{name}.tar.gz
|
||||
Source: @SOURCE@
|
||||
|
||||
BuildRequires: make
|
||||
BuildRequires: rust
|
||||
|
Reference in New Issue
Block a user