From 6032d7bccb0764b8dd61dc71fe49249c3c10a4a4 Mon Sep 17 00:00:00 2001 From: Davide Manini Date: Tue, 21 Jan 2025 14:19:43 +0200 Subject: [PATCH 1/3] Add a don't-show-again checkbox to the non-root-user initial dialog --- gtk/gsynaptic.cc | 29 ++-- gtk/gtkbuilder/dialog_admin_privileges.ui | 163 ++++++++++++++++++++++ gtk/rguserdialog.cc | 6 + gtk/rguserdialog.h | 1 + 4 files changed, 187 insertions(+), 12 deletions(-) create mode 100644 gtk/gtkbuilder/dialog_admin_privileges.ui diff --git a/gtk/gsynaptic.cc b/gtk/gsynaptic.cc index a6d5834f2..2d0d17a6c 100644 --- a/gtk/gsynaptic.cc +++ b/gtk/gsynaptic.cc @@ -169,6 +169,19 @@ void welcome_dialog(RGMainWindow *mainWindow) } } +void admin_privileges_dialog() +{ + if (_config->FindB("Synaptic::ShowAdminPrivilegesDialog", true)) { + RGGtkBuilderUserDialog dia("admin_privileges"); + dia.run(); + GtkWidget *cb = GTK_WIDGET(gtk_builder_get_object(dia.getGtkBuilder(), + "checkbutton_admin_privileges_not_show_again")); + assert(cb); + _config->Set("Synaptic::ShowAdminPrivilegesDialog", + ! gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb))); + } +} + void update_check(RGMainWindow *mainWindow, RPackageLister *lister) { struct stat st; @@ -429,24 +442,16 @@ int main(int argc, char **argv) if (_config->FindB("help") == true) ShowHelp(CmdL); - if (getuid() != 0) { - RGUserDialog userDialog; - userDialog.warning(g_strdup_printf("%s\n\n%s", - _("Starting \"Synaptic Package Manager\" without " - "administrative privileges"), - _("You will not be able to apply " - "any changes, but you can still " - "export the marked changes or " - "create a download script " - "for them."))); - } - if (!RInitConfiguration("synaptic.conf")) { RGUserDialog userDialog; userDialog.showErrors(); exit(1); } + if (getuid() != 0) { + admin_privileges_dialog(); + } + bool UpdateMode = _config->FindB("Volatile::Update-Mode",false); bool NonInteractive = _config->FindB("Volatile::Non-Interactive", false); diff --git a/gtk/gtkbuilder/dialog_admin_privileges.ui b/gtk/gtkbuilder/dialog_admin_privileges.ui new file mode 100644 index 000000000..a0a3c4284 --- /dev/null +++ b/gtk/gtkbuilder/dialog_admin_privileges.ui @@ -0,0 +1,163 @@ + + + + + + False + 6 + Quick Introduction + False + dialog + + + True + False + vertical + 6 + + + True + False + end + + + _Close + True + True + True + True + False + True + + + False + True + 0 + + + + + False + True + end + 0 + + + + + True + False + 12 + + + True + False + 0 + dialog-warning + 6 + + + True + True + 0 + + + + + True + False + vertical + 12 + + + Don't show this dialog at startup + True + True + False + end + True + 0 + True + True + + + False + False + end + 0 + + + + + True + False + vertical + 6 + + + True + False + <b><big>Starting "Synaptic Package Manager" without administrative privileges</big></b> + + True + True + 0 + 0 + + + False + True + 0 + + + + + True + False + You will not be able to apply any changes, but you can still export the marked changes or create a download script for them. + True + 0 + + + False + False + 1 + + + + + + + + + + + + + + False + True + 1 + + + + + False + True + 1 + + + + + True + True + 0 + + + + + + okbutton1 + + + diff --git a/gtk/rguserdialog.cc b/gtk/rguserdialog.cc index 6412086a3..7c67e812f 100644 --- a/gtk/rguserdialog.cc +++ b/gtk/rguserdialog.cc @@ -227,6 +227,12 @@ RGGtkBuilderUserDialog::RGGtkBuilderUserDialog(RGWindow *parent) _parentWindow = parent->window(); } +RGGtkBuilderUserDialog::RGGtkBuilderUserDialog(const char *name) +{ + _parentWindow = 0; + init(name); +} + void RGGtkBuilderUserDialog::init(const char *name) { gchar *main_widget = NULL; diff --git a/gtk/rguserdialog.h b/gtk/rguserdialog.h index b47c9a783..70929dad3 100644 --- a/gtk/rguserdialog.h +++ b/gtk/rguserdialog.h @@ -80,6 +80,7 @@ class RGGtkBuilderUserDialog : public RGUserDialog public: RGGtkBuilderUserDialog(RGWindow* parent); RGGtkBuilderUserDialog(RGWindow* parent, const char *name); + RGGtkBuilderUserDialog(const char *name); virtual ~RGGtkBuilderUserDialog() { gtk_widget_destroy(_dialog); }; void setTitle(string title) { From 657ee7db858cd11aefb044f1a60d18aab53fd3c1 Mon Sep 17 00:00:00 2001 From: Davide Manini Date: Mon, 3 Feb 2025 17:50:37 +0200 Subject: [PATCH 2/3] Make admin-privileges dialog coherent with welcome dialog. Fix POTFILES.po --- gtk/gsynaptic.cc | 2 +- gtk/gtkbuilder/dialog_admin_privileges.ui | 11 ++++++----- po/POTFILES.in | 1 + 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gtk/gsynaptic.cc b/gtk/gsynaptic.cc index 2d0d17a6c..bad5bf4e2 100644 --- a/gtk/gsynaptic.cc +++ b/gtk/gsynaptic.cc @@ -178,7 +178,7 @@ void admin_privileges_dialog() "checkbutton_admin_privileges_not_show_again")); assert(cb); _config->Set("Synaptic::ShowAdminPrivilegesDialog", - ! gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb))); + gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cb))); } } diff --git a/gtk/gtkbuilder/dialog_admin_privileges.ui b/gtk/gtkbuilder/dialog_admin_privileges.ui index a0a3c4284..b7fbf6ee6 100644 --- a/gtk/gtkbuilder/dialog_admin_privileges.ui +++ b/gtk/gtkbuilder/dialog_admin_privileges.ui @@ -70,14 +70,13 @@ 12 - Don't show this dialog at startup + Show this dialog at startup True True False end True 0 - True True @@ -97,12 +96,14 @@ True False - <b><big>Starting "Synaptic Package Manager" without administrative privileges</big></b> - - True + Starting "Synaptic Package Manager" without administrative privileges True 0 0 + + + + False diff --git a/po/POTFILES.in b/po/POTFILES.in index a3e37da89..5bd831604 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -75,6 +75,7 @@ gtk/rgtaskswin.cc [type: gettext/glade]gtk/gtkbuilder/dialog_authentication.ui [type: gettext/glade]gtk/gtkbuilder/dialog_disc_label.ui [type: gettext/glade]gtk/gtkbuilder/dialog_new_repositroy.ui +[type: gettext/glade]gtk/gtkbuilder/dialog_admin_privileges.ui data/synaptic.desktop.in data/com.ubuntu.pkexec.synaptic.policy.in gtk/rgfiltermanager.h From 2ab8fa8d4954507354ba971e0dfa213c398707b0 Mon Sep 17 00:00:00 2001 From: Davide Manini Date: Mon, 3 Feb 2025 18:26:53 +0200 Subject: [PATCH 3/3] Make admin_privileges child of mainWindow --- gtk/gsynaptic.cc | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/gtk/gsynaptic.cc b/gtk/gsynaptic.cc index bad5bf4e2..2e5808f0b 100644 --- a/gtk/gsynaptic.cc +++ b/gtk/gsynaptic.cc @@ -169,11 +169,11 @@ void welcome_dialog(RGMainWindow *mainWindow) } } -void admin_privileges_dialog() +void admin_privileges_dialog(RGMainWindow *mainWindow) { if (_config->FindB("Synaptic::ShowAdminPrivilegesDialog", true)) { - RGGtkBuilderUserDialog dia("admin_privileges"); - dia.run(); + RGGtkBuilderUserDialog dia(mainWindow); + dia.run("admin_privileges"); GtkWidget *cb = GTK_WIDGET(gtk_builder_get_object(dia.getGtkBuilder(), "checkbutton_admin_privileges_not_show_again")); assert(cb); @@ -448,10 +448,6 @@ int main(int argc, char **argv) exit(1); } - if (getuid() != 0) { - admin_privileges_dialog(); - } - bool UpdateMode = _config->FindB("Volatile::Update-Mode",false); bool NonInteractive = _config->FindB("Volatile::Non-Interactive", false); @@ -607,6 +603,9 @@ int main(int argc, char **argv) if (NonInteractive) { mainWindow->cbProceedClicked(NULL, mainWindow); } else { + if (getuid() != 0) { + admin_privileges_dialog(mainWindow); + } welcome_dialog(mainWindow); gtk_widget_grab_focus( GTK_WIDGET(gtk_builder_get_object( mainWindow->getGtkBuilder(),