~ghugesss/xpad/debug_support

« back to all changes in this revision

Viewing changes to src/xpad-pad-properties.c

  • Committer: Arthur Borsboom
  • Date: 2014-06-19 13:15:30 UTC
  • mfrom: (665.1.59 xpad-4.3)
  • Revision ID: arthurborsboom@gmail.com-20140619131530-ecsvweog8592zqie
Fix: prevented color updating conflict between preferences and pad colors
Fix: Technical - reduced code by removing double code
Fix: Technical - ensured that all the menus of each pad are updated when changing options in the View menu
Fix: renamed Xpad_periodic functions to lowercase in line with other function namings
Fix: repaired showing all the notes in the menu: pad->menu->notes
Fix: Technical - removed unnecessary initialization and unnecessary function
Fix: Resolved a disposing error of the clipboard contents after erasing a pad
Fix: Pad properties - switched foreground and background order in GUI.
Fix: Technical - got rid of the global variable: xpad_global_settings
New: added shortcuts keys for New pad (CTRL-N) and Delete (SHIFT-DEL)
Fix: Technical - changed comment style
Fix: replaced get user home dir with specific glib function
Fix: Default values are set correctly on first startup (no configuration file) by reintroducing a double default value administration.
Fix: Improved performance by reducing the amount of GTK_ casts, as suggested in the GTK best practices
Fix: Applied GTK best practices for inclusion of 1st config.h and 2nd its header file in each c-file

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
 
20
20
*/
21
21
 
22
 
#include <gtk/gtk.h>
 
22
#include "../config.h"
23
23
#include "xpad-pad-properties.h"
24
24
#include <glib/gi18n.h>
 
25
#include <gtk/gtk.h>
25
26
 
26
27
struct XpadPadPropertiesPrivate 
27
28
{
38
39
        GtkWidget *fontbutton;
39
40
};
40
41
 
41
 
G_DEFINE_TYPE_WITH_PRIVATE(XpadPadProperties, xpad_pad_properties, GTK_TYPE_DIALOG)
 
42
G_DEFINE_TYPE_WITH_PRIVATE (XpadPadProperties, xpad_pad_properties, GTK_TYPE_DIALOG)
42
43
 
43
 
static void xpad_pad_properties_dispose (GObject *object);
44
 
static void xpad_pad_properties_finalize (GObject *object);
45
44
static void xpad_pad_properties_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
46
45
static void xpad_pad_properties_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
47
46
static void xpad_pad_properties_response (GtkDialog *dialog, gint response);
48
47
static void change_color_check (GtkToggleButton *button, XpadPadProperties *prop);
49
48
static void change_font_check (GtkToggleButton *button, XpadPadProperties *prop);
50
 
static void change_text_color (GtkColorButton *button, XpadPadProperties *prop);
51
 
static void change_back_color (GtkColorButton *button, XpadPadProperties *prop);
52
 
static void change_font_face (GtkFontButton *button, XpadPadProperties *prop);
 
49
static void change_text_color (XpadPadProperties *prop);
 
50
static void change_back_color (XpadPadProperties *prop);
 
51
static void change_font_face (XpadPadProperties *prop);
53
52
 
54
53
enum
55
54
{
59
58
  PROP_BACK_COLOR,
60
59
  PROP_TEXT_COLOR,
61
60
  PROP_FONTNAME,
62
 
  LAST_PROP
 
61
  N_PROPERTIES
63
62
};
64
63
 
 
64
static GParamSpec *obj_prop[N_PROPERTIES] = { NULL, };
 
65
 
65
66
GtkWidget *
66
67
xpad_pad_properties_new (void)
67
68
{
73
74
{
74
75
        GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
75
76
        
76
 
        gobject_class->dispose = xpad_pad_properties_dispose;
77
 
        gobject_class->finalize = xpad_pad_properties_finalize;
78
77
        gobject_class->set_property = xpad_pad_properties_set_property;
79
78
        gobject_class->get_property = xpad_pad_properties_get_property;
80
79
        
81
 
        /* Properties */
82
 
        
83
 
        g_object_class_install_property (gobject_class,
84
 
                                         PROP_FOLLOW_FONT_STYLE,
85
 
                                         g_param_spec_boolean ("follow-font-style",
86
 
                                                               "Follow Font Style",
87
 
                                                               "Whether to use the default xpad font style",
88
 
                                                               TRUE,
89
 
                                                               G_PARAM_READWRITE));
90
 
        
91
 
        g_object_class_install_property (gobject_class,
92
 
                                         PROP_FOLLOW_COLOR_STYLE,
93
 
                                         g_param_spec_boolean ("follow-color-style",
94
 
                                                               "Follow Color Style",
95
 
                                                               "Whether to use the default xpad color style",
96
 
                                                               TRUE,
97
 
                                                               G_PARAM_READWRITE));
98
 
        
99
 
        g_object_class_install_property (gobject_class,
100
 
                                         PROP_TEXT_COLOR,
101
 
                                         g_param_spec_boxed ("text-color",
102
 
                                                             "Text Color",
103
 
                                                             "The color of text in the pad",
104
 
                                                             GDK_TYPE_RGBA,
105
 
                                                             G_PARAM_READWRITE));
106
 
        
107
 
        g_object_class_install_property (gobject_class,
108
 
                                         PROP_BACK_COLOR,
109
 
                                         g_param_spec_boxed ("back-color",
110
 
                                                             "Back Color",
111
 
                                                             "The color of the background in the pad",
112
 
                                                             GDK_TYPE_RGBA,
113
 
                                                             G_PARAM_READWRITE));
114
 
        
115
 
        g_object_class_install_property (gobject_class,
116
 
                                         PROP_FONTNAME,
117
 
                                         g_param_spec_string ("fontname",
118
 
                                                              "Font Name",
119
 
                                                              "The name of the font for the pad",
120
 
                                                              NULL,
121
 
                                                              G_PARAM_READWRITE));
 
80
        obj_prop[PROP_FOLLOW_FONT_STYLE] = g_param_spec_boolean ("follow-font-style", "Follow font style", "Whether to use the default xpad font style", TRUE, G_PARAM_READWRITE);
 
81
        obj_prop[PROP_FOLLOW_COLOR_STYLE] = g_param_spec_boolean ("follow-color-style", "Follow color style", "Whether to use the default xpad color style", TRUE, G_PARAM_READWRITE);
 
82
        obj_prop[PROP_TEXT_COLOR] = g_param_spec_boxed ("text-color", "Text color", "The color of text in this pad", GDK_TYPE_RGBA, G_PARAM_READWRITE);
 
83
        obj_prop[PROP_BACK_COLOR] = g_param_spec_boxed ("back-color", "Back color", "The color of the background in this pad", GDK_TYPE_RGBA, G_PARAM_READWRITE);
 
84
        obj_prop[PROP_FONTNAME] = g_param_spec_string ("fontname", "Font name", "The name of the font for this pad", NULL, G_PARAM_READWRITE);
 
85
        
 
86
        g_object_class_install_properties (gobject_class, N_PROPERTIES, obj_prop);
122
87
}
123
88
 
124
89
static void
125
90
xpad_pad_properties_init (XpadPadProperties *prop)
126
91
{
127
 
        GtkWidget *font_radio, *color_radio, *hbox, *font_hbox, *vbox = NULL;
128
 
        GtkWidget *label, *appearance_frame, *alignment, *appearance_vbox;
129
92
        gchar *text;
 
93
        GtkBox *hbox, *font_hbox, *vbox, *appearance_vbox;
 
94
        GtkWidget *font_radio, *color_radio, *label, *appearance_frame, *alignment;
130
95
        GtkSizeGroup *size_group_labels = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
131
96
        
132
 
        prop->priv = xpad_pad_properties_get_instance_private(prop);
 
97
        prop->priv = xpad_pad_properties_get_instance_private (prop);
133
98
        
134
99
        text = g_strconcat ("<b>", _("Appearance"), "</b>", NULL);
135
100
        label = GTK_WIDGET (g_object_new (GTK_TYPE_LABEL,
139
104
                NULL));
140
105
        g_free (text);
141
106
 
142
 
        appearance_vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 18);
143
 
        gtk_box_set_homogeneous (GTK_BOX (appearance_vbox), FALSE);
 
107
        appearance_vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 18));
 
108
        gtk_box_set_homogeneous (appearance_vbox, FALSE);
144
109
 
145
110
        alignment = gtk_alignment_new (1, 1, 1, 1);
146
111
        g_object_set (G_OBJECT (alignment),
155
120
                "border-width", 6,
156
121
                NULL));
157
122
        
 
123
        prop->priv->fontbutton = gtk_font_button_new ();
158
124
        prop->priv->textbutton = gtk_color_button_new ();
159
125
        prop->priv->backbutton = gtk_color_button_new ();
160
 
        prop->priv->fontbutton = gtk_font_button_new ();
161
 
        
 
126
 
162
127
        font_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Use font from xpad preferences"));
163
128
        prop->priv->fontcheck = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (font_radio), _("Use this font:"));
164
129
        color_radio = gtk_radio_button_new_with_mnemonic (NULL, _("Use colors from xpad preferences"));
165
130
        prop->priv->colorcheck = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (color_radio), _("Use these colors:"));
166
131
        
167
 
        font_hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6);
 
132
        font_hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 6));
168
133
 
169
 
        gtk_box_pack_start (GTK_BOX (font_hbox), prop->priv->fontcheck, FALSE, FALSE, 0);
170
 
        gtk_box_pack_start (GTK_BOX (font_hbox), prop->priv->fontbutton, TRUE, TRUE, 0);
 
134
        gtk_box_pack_start (font_hbox, prop->priv->fontcheck, FALSE, FALSE, 0);
 
135
        gtk_box_pack_start (font_hbox, prop->priv->fontbutton, TRUE, TRUE, 0);
171
136
        
172
137
        prop->priv->colorbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
173
 
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
174
138
 
 
139
        hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12));
 
140
        label = gtk_label_new_with_mnemonic (_("Foreground:"));
 
141
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
 
142
        gtk_size_group_add_widget (size_group_labels, label);
 
143
        gtk_box_pack_start (hbox, label, FALSE, FALSE, 0);
 
144
        gtk_box_pack_start (hbox, prop->priv->textbutton, TRUE, TRUE, 0);
 
145
        g_object_set (G_OBJECT (prop->priv->colorbox), "child", hbox, NULL);
 
146
        
 
147
        hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12));
175
148
        label = gtk_label_new_with_mnemonic (_("Background:"));
176
149
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
177
150
        gtk_size_group_add_widget (size_group_labels, label);
178
 
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
179
 
        gtk_box_pack_start (GTK_BOX (hbox), prop->priv->backbutton, TRUE, TRUE, 0);
180
 
        g_object_set (G_OBJECT (prop->priv->colorbox), "child", hbox, NULL);
181
 
        
182
 
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
183
 
        label = gtk_label_new_with_mnemonic (_("Foreground:"));
184
 
        gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
185
 
        gtk_size_group_add_widget (size_group_labels, label);
186
 
        gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
187
 
        gtk_box_pack_start (GTK_BOX (hbox), prop->priv->textbutton, TRUE, TRUE, 0);
 
151
        gtk_box_pack_start (hbox, label, FALSE, FALSE, 0);
 
152
        gtk_box_pack_start (hbox, prop->priv->backbutton, TRUE, TRUE, 0);
188
153
        g_object_set (G_OBJECT (prop->priv->colorbox), "child", hbox, NULL);
189
154
        
190
155
        alignment = gtk_alignment_new (1, 1, 1, 1);
202
167
        gtk_color_button_set_title (GTK_COLOR_BUTTON (prop->priv->backbutton), _("Set Background Color"));
203
168
        gtk_font_button_set_title (GTK_FONT_BUTTON (prop->priv->fontbutton), _("Set Font"));
204
169
        
205
 
        vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
206
 
        hbox = gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12);
207
 
 
208
 
        gtk_box_pack_start (GTK_BOX (vbox), font_radio, FALSE, FALSE, 0);
209
 
        gtk_box_pack_start (GTK_BOX (vbox), font_hbox, FALSE, FALSE, 0);
210
 
        gtk_box_pack_start (GTK_BOX (appearance_vbox), vbox, FALSE, FALSE, 0);
211
 
 
212
 
        vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 6);
213
 
 
214
 
        gtk_box_pack_start (GTK_BOX (vbox), color_radio, FALSE, FALSE, 0);
215
 
        gtk_box_pack_start (GTK_BOX (vbox), prop->priv->colorcheck, FALSE, FALSE, 0);
216
 
        gtk_box_pack_start (GTK_BOX (vbox), alignment, FALSE, FALSE, 0);
217
 
        gtk_box_pack_start (GTK_BOX (appearance_vbox), vbox, FALSE, FALSE, 0);
 
170
        vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 6));
 
171
        hbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_HORIZONTAL, 12));
 
172
 
 
173
        gtk_box_pack_start (vbox, font_radio, FALSE, FALSE, 0);
 
174
        gtk_box_pack_start (vbox, GTK_WIDGET (font_hbox), FALSE, FALSE, 0);
 
175
        gtk_box_pack_start (appearance_vbox, GTK_WIDGET (vbox), FALSE, FALSE, 0);
 
176
 
 
177
        vbox = GTK_BOX (gtk_box_new (GTK_ORIENTATION_VERTICAL, 6));
 
178
 
 
179
        gtk_box_pack_start (vbox, color_radio, FALSE, FALSE, 0);
 
180
        gtk_box_pack_start (vbox, prop->priv->colorcheck, FALSE, FALSE, 0);
 
181
        gtk_box_pack_start (vbox, alignment, FALSE, FALSE, 0);
 
182
        gtk_box_pack_start (appearance_vbox, GTK_WIDGET (vbox), FALSE, FALSE, 0);
218
183
        
 
184
        g_signal_connect (prop->priv->fontcheck, "toggled", G_CALLBACK (change_font_check), prop);
219
185
        g_signal_connect (prop->priv->colorcheck, "toggled", G_CALLBACK (change_color_check), prop);
220
 
        g_signal_connect (prop->priv->fontcheck, "toggled", G_CALLBACK (change_font_check), prop);
221
 
        g_signal_connect (prop->priv->textbutton, "color-set", G_CALLBACK (change_text_color), prop);
222
 
        g_signal_connect (prop->priv->backbutton, "color-set", G_CALLBACK (change_back_color), prop);
223
 
        g_signal_connect (prop->priv->fontbutton, "font-set", G_CALLBACK (change_font_face), prop);
 
186
        g_signal_connect_swapped (prop->priv->fontbutton, "font-set", G_CALLBACK (change_font_face), prop);
 
187
        g_signal_connect_swapped (prop->priv->textbutton, "color-set", G_CALLBACK (change_text_color), prop);
 
188
        g_signal_connect_swapped (prop->priv->backbutton, "color-set", G_CALLBACK (change_back_color), prop);
224
189
        
225
 
        /* Setup initial state, which should never be seen, but just in case client doesn't set them
226
 
           itself, we'll be consistent. */
 
190
        /* Setup initial state, which should never be seen, but just in case client doesn't set them itself, we'll be consistent. */
227
191
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (font_radio), TRUE);
228
192
        gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (color_radio), TRUE);
229
193
        gtk_widget_set_sensitive (prop->priv->colorbox, FALSE);
237
201
}
238
202
 
239
203
static void
240
 
xpad_pad_properties_dispose (GObject *object)
241
 
{
242
 
        G_OBJECT_CLASS (xpad_pad_properties_parent_class)->dispose (object);
243
 
}
244
 
 
245
 
static void
246
 
xpad_pad_properties_finalize (GObject *object)
247
 
{
248
 
        G_OBJECT_CLASS (xpad_pad_properties_parent_class)->finalize (object);
249
 
}
250
 
 
251
 
static void
252
204
xpad_pad_properties_response (GtkDialog *dialog, gint response)
253
205
{
254
206
        if (response == GTK_RESPONSE_CLOSE)
256
208
}
257
209
 
258
210
static void
 
211
change_font_check (GtkToggleButton *button, XpadPadProperties *prop)
 
212
{
 
213
        gtk_widget_set_sensitive (prop->priv->fontbutton, gtk_toggle_button_get_active (button));
 
214
 
 
215
        g_object_notify (G_OBJECT (prop), "follow-font-style");
 
216
}
 
217
 
 
218
static void
259
219
change_color_check (GtkToggleButton *button, XpadPadProperties *prop)
260
220
{
261
221
        gtk_widget_set_sensitive (prop->priv->colorbox, gtk_toggle_button_get_active (button));
264
224
}
265
225
 
266
226
static void
267
 
change_font_check (GtkToggleButton *button, XpadPadProperties *prop)
268
 
{
269
 
        gtk_widget_set_sensitive (prop->priv->fontbutton, gtk_toggle_button_get_active (button));
270
 
 
271
 
        g_object_notify (G_OBJECT (prop), "follow-font-style");
272
 
}
273
 
 
274
 
static void
275
 
change_text_color (GtkColorButton *button, XpadPadProperties *prop)
276
 
{
277
 
        /* A dirty way to silence the compiler for these unused variables. */
278
 
        (void) button;
279
 
 
 
227
change_text_color (XpadPadProperties *prop)
 
228
{
280
229
        g_object_notify (G_OBJECT (prop), "text-color");
281
230
}
282
231
 
283
232
static void
284
 
change_back_color (GtkColorButton *button, XpadPadProperties *prop)
 
233
change_back_color (XpadPadProperties *prop)
285
234
{
286
 
        /* A dirty way to silence the compiler for these unused variables. */
287
 
        (void) button;
288
 
 
289
235
        g_object_notify (G_OBJECT (prop), "back-color");
290
236
}
291
237
 
292
238
static void
293
 
change_font_face (GtkFontButton *button, XpadPadProperties *prop)
 
239
change_font_face (XpadPadProperties *prop)
294
240
{
295
 
        /* A dirty way to silence the compiler for these unused variables. */
296
 
        (void) button;
297
 
 
298
241
        g_object_notify (G_OBJECT (prop), "fontname");
299
242
}
300
243