grim/guifications1
Clone
Summary
Browse
Changes
Graph
Add a gaim_signal_emit drawing-menu to the context code, so that third party plugin menu items get displayed as well
2004-01-14, grim
f557af1954b6
Add a gaim_signal_emit drawing-menu to the context code, so that third party plugin menu items get displayed as well
/*
Guifications - The notification plugin to end all notification plugins!
Copyright (C) 2003-2004 Gary Kramlich
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include
<gtk/gtk.h>
#include
<gdk/gdk.h>
#ifdef HAVE_CONFIG_H
#include
"../gf_config.h"
#endif
#include
"gaim.h"
#include
"plugin.h"
#include
"gtkplugin.h"
#include
"gtkutils.h"
#include
"prefs.h"
#include
"debug.h"
#include
"guifications.h"
#include
"gf_types.h"
#include
"gf_conf.h"
#include
"gf_prefs.h"
#include
"gf_pngs.h"
#include
"gf_gtkutils.h"
/***********************************************************************
Globals
***********************************************************************/
static
GtkWidget
*
btn_image
,
*
btn_font
,
*
btn_color
;
static
GtkWidget
*
edt_image
;
static
GtkWidget
*
evt_color
;
/***********************************************************************
Prototypes
***********************************************************************/
static
GtkWidget
*
make_entry
(
const
gchar
*
pref
);
static
GtkWidget
*
make_button
(
gchar
*
text
);
static
void
make_color_preview
(
GtkWidget
*
image
,
const
gchar
*
color
);
/* callbacks */
static
void
chk_box_cb
(
GtkWidget
*
check
,
const
gchar
*
pref
);
static
void
spn_btn_cb
(
GtkWidget
*
spin
,
const
gchar
*
pref
);
static
void
opt_mnu_cb
(
GtkWidget
*
opt_menu
,
const
gchar
*
pref
);
static
gboolean
edt_box_cb
(
GtkWidget
*
entry
,
GdkEventFocus
*
event
,
const
gchar
*
pref
);
static
void
image_file_ok
(
GtkWidget
*
widget
,
gpointer
data
);
static
void
image_file_dialog
(
GtkWidget
*
check
,
gpointer
data
);
static
void
font_ok
(
GtkWidget
*
widget
,
gpointer
data
);
static
void
font_dialog
(
GtkWidget
*
check
,
gpointer
data
);
static
void
color_ok
(
GtkWidget
*
widget
,
gpointer
data
);
static
void
color_dialog
(
GtkWidget
*
widget
,
gpointer
data
);
/**********************************************************************/
GtkWidget
*
get_config_frame
(
GaimPlugin
*
plugin
)
{
GtkWidget
*
note
,
*
vbox
,
*
hbox
,
*
frame
,
*
label
,
*
spin
;
GtkWidget
*
chk_btn
,
*
opt_mnu
,
*
edt_box
;
GtkSizeGroup
*
sg
;
gint
pad_x
,
pad_y
;
pad_x
=
pad_y
=
5
;
/* create notebook */
note
=
gtk_notebook_new
();
/*******************************************************************
behavior tab
*******************************************************************/
/* setup behavior sizegroup */
sg
=
gtk_size_group_new
(
GTK_SIZE_GROUP_HORIZONTAL
);
/* create behavior tab */
vbox
=
gf_add_page
(
GTK_NOTEBOOK
(
note
),
"Bahavior"
,
-1
);
/* create notification frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Notifications"
);
/* create sign on/off hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create sign on check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_SIGN_ON
),
"Show _Sign On"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_SIGN_ON
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create sign off check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_SIGN_OFF
),
"Show Sign _Off"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_SIGN_OFF
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create away/back hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create away check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_AWAY
),
"Show _Away"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_AWAY
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create back check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_BACK
),
"Show _Back"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_BACK
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create idle/unidle hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create idle check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_IDLE
),
"Show _Idle"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_IDLE
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create unidle check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOW_UNIDLE
),
"Show _Unidle"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOW_UNIDLE
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create position frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Position"
);
/* create position option menu */
opt_mnu
=
gf_make_window_position_option_menu
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_WINDOW_POS
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_BEHAVIOR_WINDOW_POS
);
label
=
gf_add_label
(
opt_mnu
,
"_Position:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create vertical check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_WINDOW_VERTICAL
),
"_Vertical"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_WINDOW_VERTICAL
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create display frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Display"
);
/* create display spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_TIMEOUT
),
0
,
60
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_TIMEOUT
);
hbox
=
gf_add_label
(
spin
,
"Display _time:"
,
sg
);
label
=
gf_make_label
(
"seconds"
,
NULL
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
label
,
FALSE
,
FALSE
,
0
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create zoom option menu */
opt_mnu
=
gf_make_window_zoom_option_menu
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_ZOOM
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_BEHAVIOR_ZOOM
);
label
=
gf_add_label
(
opt_mnu
,
"_Zoom:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create alias check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_ALIAS
),
"S_how alias if set"
,
NULL
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_ALIAS
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* show if away check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_BEHAVIOR_SHOWAWAY
),
"Sho_w Guifications while away"
,
NULL
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_BEHAVIOR_SHOWAWAY
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create mouse frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Mouse"
);
/* create mouse1 option */
opt_mnu
=
gf_make_window_mouse_option_menu
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_MOUSE1
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_BEHAVIOR_MOUSE1
);
label
=
gf_add_label
(
opt_mnu
,
"_Left Button:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create mouse2 option */
opt_mnu
=
gf_make_window_mouse_option_menu
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_MOUSE2
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_BEHAVIOR_MOUSE2
);
label
=
gf_add_label
(
opt_mnu
,
"_Middle Button:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create mouse3 option */
opt_mnu
=
gf_make_window_mouse_option_menu
(
gaim_prefs_get_int
(
GF_PREF_BEHAVIOR_MOUSE3
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_BEHAVIOR_MOUSE3
);
label
=
gf_add_label
(
opt_mnu
,
"_Right Button:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/*******************************************************************
appearance tab
*******************************************************************/
/* make appearance sizegroup */
sg
=
gtk_size_group_new
(
GTK_SIZE_GROUP_HORIZONTAL
);
/* create appearance tab */
vbox
=
gf_add_page
(
GTK_NOTEBOOK
(
note
),
"Appearance"
,
-1
);
/* create image frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Image"
);
/* create image check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_IMAGE
),
"Use custom _image"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_IMAGE
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create image entry/button hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create image edit box */
edt_image
=
make_entry
(
GF_PREF_APPEARANCE_IMAGE_FILE
);
gtk_widget_set_sensitive
(
edt_image
,
FALSE
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
edt_image
,
FALSE
,
FALSE
,
0
);
/* create image button */
btn_image
=
make_button
(
"_Browse..."
);
gtk_widget_set_sensitive
(
btn_image
,
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_IMAGE
));
g_signal_connect
(
G_OBJECT
(
btn_image
),
"clicked"
,
G_CALLBACK
(
image_file_dialog
),
NULL
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
btn_image
,
FALSE
,
FALSE
,
0
);
/* create text frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Text"
);
/* create font hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create font check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_FONT
),
"Use custom fon_t"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_FONT
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create font button */
btn_font
=
gtk_button_new_from_stock
(
GTK_STOCK_SELECT_FONT
);
gtk_widget_set_sensitive
(
btn_font
,
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_FONT
));
g_signal_connect
(
G_OBJECT
(
btn_font
),
"clicked"
,
G_CALLBACK
(
font_dialog
),
NULL
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
btn_font
,
FALSE
,
FALSE
,
0
);
/* create color hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
4
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create color check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_COLOR
),
"Use custom co_lor"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_COLOR
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create color button */
btn_color
=
gtk_button_new_from_stock
(
GTK_STOCK_SELECT_COLOR
);
gtk_widget_set_sensitive
(
btn_color
,
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_COLOR
));
g_signal_connect
(
G_OBJECT
(
btn_color
),
"clicked"
,
G_CALLBACK
(
color_dialog
),
NULL
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
btn_color
,
FALSE
,
FALSE
,
0
);
/* create color event box */
evt_color
=
gtk_event_box_new
();
gtk_widget_set_size_request
(
evt_color
,
50
,
-1
);
make_color_preview
(
evt_color
,
gaim_prefs_get_string
(
GF_PREF_COLORS_FOREGROUND
));
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
evt_color
,
FALSE
,
FALSE
,
0
);
/* create clipping option menu */
opt_mnu
=
gf_make_text_clipping_option_menu
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_TEXT_CLIPPING
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_APPEARANCE_TEXT_CLIPPING
);
label
=
gf_add_label
(
opt_mnu
,
"Clippin_g:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create position option menu */
opt_mnu
=
gf_make_item_position_option_menu
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_TEXT_POS
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_APPEARANCE_TEXT_POS
);
label
=
gf_add_label
(
opt_mnu
,
"_Position:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create horz spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_TEXT_X
),
0
,
255
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_TEXT_X
);
label
=
gf_add_label
(
spin
,
"_Horizontal offset:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create vert spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_TEXT_Y
),
0
,
255
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_TEXT_Y
);
label
=
gf_add_label
(
spin
,
"_Vertical offset:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create protocol frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Protocol"
);
/* create position option menu */
opt_mnu
=
gf_make_item_position_option_menu
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_PROT_POS
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_APPEARANCE_PROT_POS
);
label
=
gf_add_label
(
opt_mnu
,
"P_osition:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create size option menu */
opt_mnu
=
gf_make_icon_size_option_menu
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_PROT_SIZE
));
g_signal_connect
(
G_OBJECT
(
opt_mnu
),
"changed"
,
G_CALLBACK
(
opt_mnu_cb
),
GF_PREF_APPEARANCE_PROT_SIZE
);
label
=
gf_add_label
(
opt_mnu
,
"Si_ze:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create horz spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_PROT_X
),
0
,
255
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_PROT_X
);
label
=
gf_add_label
(
spin
,
"Ho_rizontal offset:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create vert spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_APPEARANCE_PROT_Y
),
0
,
255
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_APPEARANCE_PROT_Y
);
label
=
gf_add_label
(
spin
,
"Ver_tical offset:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/*******************************************************************
Messages tab
*******************************************************************/
/* make messages size group */
sg
=
gtk_size_group_new
(
GTK_SIZE_GROUP_HORIZONTAL
);
/* create message tab */
vbox
=
gf_add_page
(
GTK_NOTEBOOK
(
note
),
"Messages"
,
-1
);
/* create messages frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Status Messages"
);
/* create sign on line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_SIGN_ON
);
label
=
gf_add_label
(
edt_box
,
"_Sign on:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create sign off line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_SIGN_OFF
);
label
=
gf_add_label
(
edt_box
,
"Sign _off:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create away line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_AWAY
);
label
=
gf_add_label
(
edt_box
,
"_Away:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create back line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_BACK
);
label
=
gf_add_label
(
edt_box
,
"_Back:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create idle line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_IDLE
);
label
=
gf_add_label
(
edt_box
,
"_Idle:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/* create unidle line */
edt_box
=
make_entry
(
GF_PREF_MESSAGES_UNIDLE
);
label
=
gf_add_label
(
edt_box
,
"_Unidle:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
label
,
FALSE
,
FALSE
,
0
);
/*******************************************************************
Advanced tab
*******************************************************************/
/* make advanced sizeground */
sg
=
gtk_size_group_new
(
GTK_SIZE_GROUP_HORIZONTAL
);
/* create advanced tab */
vbox
=
gf_add_page
(
GTK_NOTEBOOK
(
note
),
"Advanced"
,
-1
);
/* create release notification frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Release Notification"
);
/* create release notification check */
chk_btn
=
gf_make_check_button
(
gaim_prefs_get_bool
(
GF_PREF_ADVANCED_RELEASE
),
"Check for new releases"
,
sg
);
g_signal_connect
(
G_OBJECT
(
chk_btn
),
"clicked"
,
G_CALLBACK
(
chk_box_cb
),
(
gpointer
)
GF_PREF_ADVANCED_RELEASE
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
chk_btn
,
FALSE
,
FALSE
,
0
);
/* create behavior frame */
frame
=
gaim_gtk_make_frame
(
vbox
,
"Behavior"
);
/* create sign on spin */
spin
=
gf_make_spin_button
(
gaim_prefs_get_int
(
GF_PREF_ADVANCED_DELAY
),
0
,
30000
,
TRUE
);
g_signal_connect
(
G_OBJECT
(
spin
),
"changed"
,
G_CALLBACK
(
spn_btn_cb
),
(
gpointer
)
GF_PREF_ADVANCED_DELAY
);
hbox
=
gf_add_label
(
spin
,
"_Sign on delay:"
,
sg
);
/* create sign on description */
label
=
gf_make_label
(
"milliseconds"
,
NULL
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
label
,
FALSE
,
FALSE
,
0
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
#ifndef _WIN32
#ifdef HAVE_CONFIG_H
/* create misc frame */
frame
=
gf_make_hig_frame
(
vbox
,
"Miscellaneous"
);
/* create configure hbox */
hbox
=
gtk_hbox_new
(
FALSE
,
0
);
gtk_box_pack_start
(
GTK_BOX
(
frame
),
hbox
,
FALSE
,
FALSE
,
0
);
/* create configure label */
label
=
gf_make_label
(
"Configure Arguments:"
,
sg
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
label
,
FALSE
,
FALSE
,
0
);
/* create configure args label */
label
=
gf_make_label
(
GF_CONFIG_ARGS
,
NULL
);
gtk_label_set_line_wrap
(
GTK_LABEL
(
label
),
TRUE
);
gtk_box_pack_start
(
GTK_BOX
(
hbox
),
label
,
FALSE
,
FALSE
,
0
);
#endif
#endif
gtk_widget_show_all
(
note
);
g_object_unref
(
sg
);
return
note
;
}
/**********************************************************************/
static
void
make_color_preview
(
GtkWidget
*
image
,
const
gchar
*
color
)
{
GtkStyle
*
style
;
GdkColor
gcolor
;
PangoColor
pcolor
;
gcolor
.
pixel
=
0
;
if
(
gaim_prefs_get_bool
(
GF_PREF_APPEARANCE_COLOR
))
{
pango_color_parse
(
&
pcolor
,
color
);
gcolor
.
red
=
pcolor
.
red
;
gcolor
.
green
=
pcolor
.
green
;
gcolor
.
blue
=
pcolor
.
blue
;
}
else
gcolor
.
red
=
gcolor
.
green
=
gcolor
.
blue
=
0
;
style
=
gtk_style_new
();
style
->
bg
[
0
]
=
gcolor
;
gtk_widget_set_style
(
image
,
style
);
g_object_unref
(
style
);
}
/**********************************************************************/
static
GtkWidget
*
make_entry
(
const
gchar
*
pref
)
{
GtkWidget
*
entry
;
entry
=
gtk_entry_new
();
gtk_entry_set_text
(
GTK_ENTRY
(
entry
),
gaim_prefs_get_string
(
pref
));
g_signal_connect
(
G_OBJECT
(
entry
),
"focus-out-event"
,
G_CALLBACK
(
edt_box_cb
),
(
gpointer
)
pref
);
return
entry
;
}
/**********************************************************************/
static
GtkWidget
*
make_button
(
gchar
*
text
)
{
GtkWidget
*
ret
;
ret
=
gtk_button_new_with_mnemonic
(
text
);
return
ret
;
}
/***********************************************************************
Callbacks
***********************************************************************/
static
void
chk_box_cb
(
GtkWidget
*
check
,
const
gchar
*
pref
)
{
gboolean
enabled
=
gtk_toggle_button_get_active
(
GTK_TOGGLE_BUTTON
(
check
));
gaim_prefs_set_bool
(
pref
,
enabled
);
if
(
g_ascii_strcasecmp
(
pref
,
GF_PREF_APPEARANCE_IMAGE
)
==
0
)
gtk_widget_set_sensitive
(
btn_image
,
enabled
);
else
if
(
g_ascii_strcasecmp
(
pref
,
GF_PREF_APPEARANCE_FONT
)
==
0
)
gtk_widget_set_sensitive
(
btn_font
,
enabled
);
else
if
(
g_ascii_strcasecmp
(
pref
,
GF_PREF_APPEARANCE_COLOR
)
==
0
)
{
gtk_widget_set_sensitive
(
btn_color
,
enabled
);
make_color_preview
(
evt_color
,
gaim_prefs_get_string
(
GF_PREF_COLORS_FOREGROUND
));
}
}
/**********************************************************************/
static
void
spn_btn_cb
(
GtkWidget
*
spin
,
const
gchar
*
pref
)
{
gaim_prefs_set_int
(
pref
,
gtk_spin_button_get_value_as_int
(
GTK_SPIN_BUTTON
(
spin
)));
}
/**********************************************************************/
static
void
opt_mnu_cb
(
GtkWidget
*
opt_menu
,
const
gchar
*
pref
)
{
if
(
g_ascii_strcasecmp
(
pref
,
GF_PREF_BEHAVIOR_ZOOM
)
==
0
)
gf_destroy_all
();
gaim_prefs_set_int
(
pref
,
gtk_option_menu_get_history
(
GTK_OPTION_MENU
(
opt_menu
)));
}
/**********************************************************************/
static
gboolean
edt_box_cb
(
GtkWidget
*
entry
,
GdkEventFocus
*
event
,
const
gchar
*
pref
)
{
gaim_prefs_set_string
(
pref
,
gtk_entry_get_text
(
GTK_ENTRY
(
entry
)));
return
FALSE
;
}
/**********************************************************************/
static
void
image_file_dialog
(
GtkWidget
*
check
,
gpointer
data
)
{
GtkWidget
*
file_sel
;
file_sel
=
gtk_file_selection_new
(
"Select a background image"
);
gtk_file_selection_set_filename
(
GTK_FILE_SELECTION
(
file_sel
),
gaim_prefs_get_string
(
GF_PREF_APPEARANCE_IMAGE_FILE
));
gtk_file_selection_hide_fileop_buttons
(
GTK_FILE_SELECTION
(
file_sel
));
g_signal_connect
(
G_OBJECT
(
GTK_FILE_SELECTION
(
file_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
image_file_ok
),
(
gpointer
)
file_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_FILE_SELECTION
(
file_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
file_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_FILE_SELECTION
(
file_sel
)
->
cancel_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
file_sel
);
gtk_widget_show
(
file_sel
);
}
/**********************************************************************/
static
void
image_file_ok
(
GtkWidget
*
widget
,
gpointer
data
)
{
GtkWidget
*
file_sel
=
(
GtkWidget
*
)
data
,
*
message_box
=
NULL
;
const
gchar
*
file
;
GdkPixbuf
*
pixbuf
;
file
=
gtk_file_selection_get_filename
(
GTK_FILE_SELECTION
(
file_sel
));
pixbuf
=
gdk_pixbuf_new_from_file
(
file
,
NULL
);
if
(
pixbuf
!=
NULL
)
{
gf_destroy_all
();
gaim_prefs_set_string
(
GF_PREF_APPEARANCE_IMAGE_FILE
,
file
);
g_object_unref
(
pixbuf
);
gtk_entry_set_text
(
GTK_ENTRY
(
edt_image
),
file
);
}
else
{
message_box
=
gtk_message_dialog_new
(
NULL
,
0
,
GTK_MESSAGE_ERROR
,
GTK_BUTTONS_OK
,
"The file
\"
%s
\"
is not a valid image file"
,
file
);
g_signal_connect_swapped
(
G_OBJECT
(
message_box
),
"response"
,
G_CALLBACK
(
gtk_widget_destroy
),
GTK_OBJECT
(
message_box
));
gtk_widget_show
(
message_box
);
}
}
/**********************************************************************/
static
void
font_dialog
(
GtkWidget
*
check
,
gpointer
data
)
{
GtkWidget
*
font_sel
;
font_sel
=
gtk_font_selection_dialog_new
(
"Select Font"
);
gtk_font_selection_dialog_set_font_name
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
),
gaim_prefs_get_string
(
GF_PREF_APPEARANCE_FONT_FACE
));
gtk_font_selection_dialog_set_preview_text
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
),
"Guifications"
);
g_signal_connect
(
G_OBJECT
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
font_ok
),
(
gpointer
)
font_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
font_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
)
->
cancel_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
font_sel
);
gtk_widget_show
(
font_sel
);
}
/**********************************************************************/
static
void
font_ok
(
GtkWidget
*
widget
,
gpointer
data
)
{
GtkWidget
*
font_sel
=
(
GtkWidget
*
)
data
;
const
gchar
*
face
;
face
=
gtk_font_selection_dialog_get_font_name
(
GTK_FONT_SELECTION_DIALOG
(
font_sel
));
gaim_prefs_set_string
(
GF_PREF_APPEARANCE_FONT_FACE
,
face
);
}
/**********************************************************************/
static
void
color_dialog
(
GtkWidget
*
widget
,
gpointer
data
)
{
GtkWidget
*
color_sel
;
GdkColor
color
;
PangoColor
pcolor
;
pango_color_parse
(
&
pcolor
,
gaim_prefs_get_string
(
GF_PREF_COLORS_FOREGROUND
));
color
.
red
=
pcolor
.
red
;
color
.
green
=
pcolor
.
green
;
color
.
blue
=
pcolor
.
blue
;
color_sel
=
gtk_color_selection_dialog_new
(
"Select Font Color"
);
gtk_color_selection_set_current_color
(
GTK_COLOR_SELECTION
(
GTK_COLOR_SELECTION_DIALOG
(
color_sel
)
->
colorsel
),
&
color
);
g_signal_connect
(
G_OBJECT
(
GTK_COLOR_SELECTION_DIALOG
(
color_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
color_ok
),
(
gpointer
)
color_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_COLOR_SELECTION_DIALOG
(
color_sel
)
->
ok_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
color_sel
);
g_signal_connect_swapped
(
G_OBJECT
(
GTK_COLOR_SELECTION_DIALOG
(
color_sel
)
->
cancel_button
),
"clicked"
,
G_CALLBACK
(
gtk_widget_destroy
),
(
gpointer
)
color_sel
);
gtk_widget_show
(
color_sel
);
}
/**********************************************************************/
static
void
color_ok
(
GtkWidget
*
widget
,
gpointer
data
)
{
GtkWidget
*
color_sel
=
(
GtkWidget
*
)
data
;
GdkColor
color
;
char
buf
[
14
];
gtk_color_selection_get_current_color
(
GTK_COLOR_SELECTION
(
GTK_COLOR_SELECTION_DIALOG
(
color_sel
)
->
colorsel
),
&
color
);
g_snprintf
(
buf
,
sizeof
(
buf
),
"#%04x%04x%04x"
,
color
.
red
,
color
.
green
,
color
.
blue
);
make_color_preview
(
evt_color
,
buf
);
gaim_prefs_set_string
(
GF_PREF_COLORS_FOREGROUND
,
buf
);
}
/**********************************************************************/