diff -r 83b658257a8a -r 40130f43df93 pidgin/plugins/transparency/transparency.c --- a/pidgin/plugins/transparency/transparency.c Sun Sep 25 00:19:58 2022 -0500 +++ b/pidgin/plugins/transparency/transparency.c Sun Sep 25 00:40:18 2022 -0500 @@ -48,13 +48,14 @@ /* * LOCALS */ -static const char *OPT_WINTRANS_IM_ENABLED= "/plugins/gtk/transparency/im_enabled"; -static const char *OPT_WINTRANS_IM_ALPHA = "/plugins/gtk/transparency/im_alpha"; -static const char *OPT_WINTRANS_IM_SLIDER = "/plugins/gtk/transparency/im_slider"; -static const char *OPT_WINTRANS_IM_ONFOCUS= "/plugins/gtk/transparency/im_solid_onfocus"; -static const char *OPT_WINTRANS_BL_ENABLED= "/plugins/gtk/transparency/bl_enabled"; -static const char *OPT_WINTRANS_BL_ALPHA = "/plugins/gtk/transparency/bl_alpha"; -static const char *OPT_WINTRANS_BL_ONFOCUS= "/plugins/gtk/transparency/bl_solid_onfocus"; +#define OPT_SCHEMA "im.pidgin.Pidgin.plugin.Transparency" +#define OPT_WINTRANS_IM_ENABLED "im-enabled" +#define OPT_WINTRANS_IM_ALPHA "im-alpha" +#define OPT_WINTRANS_IM_SLIDER "im-slider" +#define OPT_WINTRANS_IM_ONFOCUS "im-solid-onfocus" +#define OPT_WINTRANS_BL_ENABLED "bl-enabled" +#define OPT_WINTRANS_BL_ALPHA "bl-alpha" +#define OPT_WINTRANS_BL_ONFOCUS "bl-solid-onfocus" /* * CODE @@ -96,16 +97,25 @@ focus_conv_win_cb(GtkEventControllerFocus *self, gpointer data) { GtkWidget *window = NULL; gboolean enter = GPOINTER_TO_INT(data); + GSettings *settings = NULL; - if(!purple_prefs_get_bool(OPT_WINTRANS_IM_ENABLED)) { + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + + if(!g_settings_get_boolean(settings, OPT_WINTRANS_IM_ENABLED)) { + g_object_unref(settings); return; } - if(!purple_prefs_get_bool(OPT_WINTRANS_IM_ONFOCUS)) { + if(!g_settings_get_boolean(settings, OPT_WINTRANS_IM_ONFOCUS)) { + g_object_unref(settings); return; } window = gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(self)); - set_wintrans(window, purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA), !enter); + set_wintrans(window, g_settings_get_int(settings, OPT_WINTRANS_IM_ALPHA), + !enter); + + g_object_unref(settings); } static void @@ -140,27 +150,44 @@ { GtkWidget *window = NULL; gboolean enter = GPOINTER_TO_INT(data); + GSettings *settings = NULL; - if(!purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) { + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + + if(!g_settings_get_boolean(settings, OPT_WINTRANS_BL_ENABLED)) { + g_object_unref(settings); return; } - if(!purple_prefs_get_bool(OPT_WINTRANS_BL_ONFOCUS)) { + if(!g_settings_get_boolean(settings, OPT_WINTRANS_BL_ONFOCUS)) { + g_object_unref(settings); return; } window = gtk_event_controller_get_widget(GTK_EVENT_CONTROLLER(self)); - set_wintrans(window, purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA), !enter); + set_wintrans(window, + g_settings_get_int(settings, OPT_WINTRANS_BL_ALPHA), + !enter); + + g_object_unref(settings); } static void change_alpha(GtkWidget *w, gpointer data) { int alpha = gtk_range_get_value(GTK_RANGE(w)); - purple_prefs_set_int(OPT_WINTRANS_IM_ALPHA, alpha); + GSettings *settings = NULL; + + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + + g_settings_set_int(settings, OPT_WINTRANS_IM_ALPHA, alpha); /* If we're in no-transparency on focus mode, * don't take effect immediately */ - if (!purple_prefs_get_bool(OPT_WINTRANS_IM_ONFOCUS)) { + if(!g_settings_get_boolean(settings, OPT_WINTRANS_IM_ONFOCUS)) { set_wintrans(GTK_WIDGET(data), alpha, TRUE); } + + g_object_unref(settings); } /* Clean up transparency stuff for the conv window */ @@ -193,19 +220,17 @@ static void remove_slider(GtkWidget *slider_frame) { - purple_prefs_disconnect_by_handle(slider_frame); gtk_widget_unparent(slider_frame); } static void -update_slider(G_GNUC_UNUSED const gchar *name, - G_GNUC_UNUSED PurplePrefType type, - gconstpointer val, gpointer data) +update_slider(GSettings *settings, gchar *key, gpointer data) { GtkWidget *slider = data; - gint imalpha = GPOINTER_TO_INT(val); + gint alpha = 255; - gtk_range_set_value(GTK_RANGE(slider), imalpha); + alpha = g_settings_get_int(settings, key); + gtk_range_set_value(GTK_RANGE(slider), alpha); } static void add_slider(GtkWidget *win) { @@ -214,6 +239,7 @@ GtkWidget *hbox; GtkWidget *label, *slider; gint imalpha = 255; + GSettings *settings = NULL; /* Look up this window to see if it already has a slider */ if (g_object_get_data(G_OBJECT(win), WINTRANS_SLIDER_KEY) != NULL) { @@ -230,6 +256,9 @@ return; } + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + slider_frame = gtk_frame_new(NULL); gtk_widget_set_margin_start(slider_frame, 6); gtk_widget_set_margin_end(slider_frame, 6); @@ -245,31 +274,42 @@ gtk_widget_set_hexpand(slider, TRUE); gtk_box_append(GTK_BOX(hbox), slider); - imalpha = purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA); + imalpha = g_settings_get_int(settings, OPT_WINTRANS_IM_ALPHA); gtk_range_set_value(GTK_RANGE(slider), imalpha); /* On slider val change, update window's transparency level */ g_signal_connect(G_OBJECT(slider), "value-changed", G_CALLBACK(change_alpha), win); - /* Set the initial transparency level */ - set_wintrans(win, purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA), TRUE); + /* We cannot use g_settings_bind because GtkScale has no value property. */ + g_signal_connect_object(settings, "changed::" OPT_WINTRANS_IM_ALPHA, + G_CALLBACK(update_slider), slider, 0); - purple_prefs_connect_callback(slider_frame, OPT_WINTRANS_IM_ALPHA, - update_slider, slider); + /* Set the initial transparency level */ + set_wintrans(win, g_settings_get_int(settings, OPT_WINTRANS_IM_ALPHA), + TRUE); /* Set window data, to track that it has a slider */ g_object_set_data_full(G_OBJECT(win), WINTRANS_SLIDER_KEY, slider_frame, (GDestroyNotify)remove_slider); + + g_object_unref(settings); } /* Remove all transparency related aspects from conversation windows */ static void remove_convs_wintrans(gboolean remove_signal) { GApplication *application = NULL; GList *wins; + GSettings *settings = NULL; + gboolean im_enabled = FALSE; application = g_application_get_default(); wins = gtk_application_get_windows(GTK_APPLICATION(application)); + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + im_enabled = g_settings_get_boolean(settings, OPT_WINTRANS_IM_ENABLED); + g_object_unref(settings); + for(; wins; wins = wins->next) { GtkWidget *window = wins->data; @@ -277,7 +317,7 @@ continue; } - if (purple_prefs_get_bool(OPT_WINTRANS_IM_ENABLED)) { + if (im_enabled) { set_wintrans(window, 0, FALSE); } @@ -292,14 +332,23 @@ static void set_conv_window_trans(GtkWidget *window) { + GSettings *settings = NULL; + + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + /* check prefs to see if we want trans */ - if (purple_prefs_get_bool(OPT_WINTRANS_IM_ENABLED)) { - set_wintrans(window, purple_prefs_get_int(OPT_WINTRANS_IM_ALPHA), TRUE); + if (g_settings_get_boolean(settings, OPT_WINTRANS_IM_ENABLED)) { + set_wintrans(window, + g_settings_get_int(settings, OPT_WINTRANS_IM_ALPHA), + TRUE); - if (purple_prefs_get_bool(OPT_WINTRANS_IM_SLIDER)) { + if (g_settings_get_boolean(settings, OPT_WINTRANS_IM_SLIDER)) { add_slider(window); } } + + g_object_unref(settings); } static void update_convs_wintrans(GtkWidget *toggle_btn, const char *pref) { @@ -346,13 +395,18 @@ static void blist_created_cb(PurpleBuddyList *purple_blist, gpointer data) { GtkWidget *window = get_buddy_list_window(); + GSettings *settings = NULL; + + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + if (window != NULL) { GtkEventController *focus = NULL; - if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) { + if (g_settings_get_boolean(settings, OPT_WINTRANS_BL_ENABLED)) { set_wintrans(window, - purple_prefs_get_int(OPT_WINTRANS_BL_ALPHA), - TRUE); + g_settings_get_int(settings, OPT_WINTRANS_BL_ALPHA), + TRUE); } focus = gtk_event_controller_focus_new(); @@ -365,6 +419,8 @@ gtk_widget_add_controller(window, focus); g_object_set_data(G_OBJECT(window), WINTRANS_CONTROLLER_KEY, focus); } + + g_object_unref(settings); } static void alpha_change(GtkWidget *w, gpointer data) { @@ -554,17 +610,6 @@ GApplication *application = NULL; GtkWidget *window = NULL; - purple_prefs_add_none("/plugins/gtk"); - purple_prefs_add_none("/plugins/gtk/transparency"); - purple_prefs_add_bool(OPT_WINTRANS_IM_ENABLED, FALSE); - purple_prefs_add_int(OPT_WINTRANS_IM_ALPHA, 255); - purple_prefs_add_bool(OPT_WINTRANS_IM_SLIDER, FALSE); - purple_prefs_add_bool(OPT_WINTRANS_IM_ONFOCUS, FALSE); - purple_prefs_add_bool(OPT_WINTRANS_BL_ENABLED, FALSE); - purple_prefs_add_int(OPT_WINTRANS_BL_ALPHA, 255); - purple_prefs_add_bool(OPT_WINTRANS_BL_ONFOCUS, FALSE); - purple_prefs_rename("/plugins/gtk/win32/wintrans", "/plugins/gtk/transparency"); - application = g_application_get_default(); g_signal_connect(application, "window-added", G_CALLBACK(new_conversation_cb), NULL); @@ -595,11 +640,15 @@ window = get_buddy_list_window(); if (window != NULL) { + GSettings *settings = NULL; GtkEventController *focus = NULL; - if (purple_prefs_get_bool(OPT_WINTRANS_BL_ENABLED)) { + settings = g_settings_new_with_backend(OPT_SCHEMA, + purple_core_get_settings_backend()); + if (g_settings_get_boolean(settings, OPT_WINTRANS_BL_ENABLED)) { set_wintrans(window, 0, FALSE); } + g_object_unref(settings); /* Remove the focus cbs */ focus = g_object_get_data(G_OBJECT(window), WINTRANS_CONTROLLER_KEY);