new (temporary) html view and bug fixication

2001-01-24  jacob berkman  <jacob@ximian.com>

	* new-control-center/*.[ch]: new (temporary) html view and bug
	fixication

	* root-manager/*.[ch]: gnomeify dialogs and other cleanups

	* configure.in: flags for root-manager-helper

2001-01-17  jacob berkman  <jacob@ximian.com>

	* root-manager/Makefile.am
	* root-manager/root-manager.h: fix finding the root-manager
This commit is contained in:
jacob berkman 2001-01-24 20:26:38 +00:00 committed by Jacob Berkman
parent 7907e0962f
commit 22bec884b7
26 changed files with 719 additions and 792 deletions

View file

@ -1,3 +1,17 @@
2001-01-24 jacob berkman <jacob@ximian.com>
* new-control-center/*.[ch]: new (temporary) html view and bug
fixication
* root-manager/*.[ch]: gnomeify dialogs and other cleanups
* configure.in: flags for root-manager-helper
2001-01-17 jacob berkman <jacob@ximian.com>
* root-manager/Makefile.am
* root-manager/root-manager.h: fix finding the root-manager
2001-01-24 Bradford Hovinen <hovinen@ximian.com>
* configure.in: Added ROLLBACK_CAPPLET_{CFLAGS|LIBS} for the

View file

@ -105,6 +105,9 @@ ROLLBACK_CAPPLET_LIBS=`gnome-config --libs libglade capplet gdk_pixbuf ximian_ar
GNOMECC_CFLAGS=`gnome-config --cflags gnomeui libglade xml gdk_pixbuf capplet gnomecanvaspixbuf gtkhtml`
GNOMECC_LIBS=`gnome-config --libs gnomeui libglade xml gdk_pixbuf capplet gnomecanvaspixbuf gtkhtml`
RMHELPER_CFLAGS=`gnome-config --cflags gnomeui gnomecanvaspixbuf`
RMHELPER_LIBS=`gnome-config --libs gnomeui gnomecanvaspixbuf`
AC_SUBST(CAPPLET_CFLAGS)
AC_SUBST(CAPPLET_LIBS)
@ -117,6 +120,9 @@ AC_SUBST(ROLLBACK_CAPPLET_LIBS)
AC_SUBST(GNOMECC_CFLAGS)
AC_SUBST(GNOMECC_LIBS)
AC_SUBST(RMHELPER_CFLAGS)
AC_SUBST(RMHELPER_LIBS)
AC_SUBST(CFLAGS)
AC_SUBST(LDFLAGS)

View file

@ -1,8 +1,15 @@
appicondir = $(datadir)/pixmaps
appicon_DATA = control-center.png
splashdir = $(datadir)/pixmaps
splash_DATA = ccsplash.png
splashdir = $(datadir)/pixmaps/gnomecc
splash_DATA = \
ccsplash.png \
bgtop.png \
bg.png \
empty.png \
foot.png \
left_top.png \
left.png
sysdir = $(datadir)/gnome/apps/Settings
sys_DATA = gnomecc.desktop
@ -23,8 +30,9 @@ INCLUDES = \
-DVERSION=\""$(VERSION)"\" \
-DSETTINGS_DIR=\""$(datadir)/control-center"\" \
-DPIXMAPS_DIR=\""$(appicondir)"\" \
-DGNOME_SBINDIR=\""$(sbindir)"\" \
$(GNOEMCC_CFLAGS)
-DART_DIR=\""$(splashdir)"\" \
-DGNOME_SBINDIR=\""$(sbindir)"\"
$(GNOMECC_CFLAGS)
bin_PROGRAMS = gnomecc

BIN
control-center/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 109 B

BIN
control-center/bgtop.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 396 B

View file

@ -31,20 +31,28 @@
#include "capplet-dir-view.h"
typedef struct {
GtkHTML *top;
GtkHTML *main;
} HtmlViewData;
static void
html_clear (CappletDirView *view)
{
g_return_if_fail (GTK_IS_HTML (view->view));
HtmlViewData *data;
gtk_html_load_empty (GTK_HTML (view->view));
data = view->view_data;
gtk_html_load_empty (data->top);
gtk_html_load_empty (data->main);
}
static void
html_clean (CappletDirView *view)
{
g_return_if_fail (GTK_IS_HTML (view->view));
gtk_object_destroy (GTK_OBJECT (view->view));
/* gtk_widget_unparent (view->view); */
g_free (view->view_data);
view->view_data = NULL;
}
#define BUFLEN 4096
@ -113,18 +121,52 @@ write_parent_html (CappletDir *dir, GtkHTML *html, GtkHTMLStream *stream)
g_free (s);
}
static void
header_populate (CappletDirView *view)
{
GtkHTMLStream *stream;
HtmlViewData *data;
char *s;
data = view->view_data;
stream = gtk_html_begin (data->top);
#warning this should probably be loaded from a file yo
s =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">\n"
"<html>\n"
"<head></head>\n"
"<body marginwidth=\"0\" marginheight=\"0\" background=\""ART_DIR"/bgtop.png\">\n"
"<img src=\""ART_DIR"/left_top.png\" alt=\"\" width=\"47\" height=\"139\" />\n"
"<img src=\""ART_DIR"/empty.png\" alt=\"\" width=\"5\" height=\"110\" />\n"
"<img src=\""ART_DIR"/foot.png\" alt=\"Gnome\" />\n"
"<img src=\""ART_DIR"/empty.png\" alt=\"\" width=\"5\" height=\"110\" />\n"
"<FONT face=\"Trebuchet MS CE,Trebuchet MS, Verdana CE, Verdana, Sans-Serif CE, Sans-Serif\" size=\"6\" color=\"white\">Your Gnome</font>\n"
#if 0
"<img src=\""ART_DIR"/yourgnome.png\" alt=\"\" />\n"
#endif
"</body>\n"
"</html>";
gtk_html_write (data->top, stream, s, strlen (s));
gtk_html_end (data->top, stream, GTK_HTML_STREAM_OK);
gtk_widget_set_usize (GTK_WIDGET (data->top), 0, 139);
}
static void
html_populate (CappletDirView *view)
{
HtmlViewData *data;
GtkHTMLStream *stream;
CappletDirEntry *entry;
GSList *item;
int i;
char *s;
g_return_if_fail (GTK_IS_HTML (view->view));
header_populate (view);
stream = gtk_html_begin (GTK_HTML (view->view));
data = view->view_data;
stream = gtk_html_begin (data->main);
s =
"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\n"
@ -132,8 +174,11 @@ html_populate (CappletDirView *view)
" <head>\n"
" <title>GNOME Control Center</title>\n"
" </head>\n"
" <body marginheight=\"0\" marginwidth=\"0\">\n"
" <body marginheight=\"0\" marginwidth=\"0\" background=\""ART_DIR"/bg.png\">\n"
" <img src=\""ART_DIR"/left.png\" align=\"left\" alt=\"\">\n"
" <p align=\"center\">\n"
#if 0
" <img src=\""ART_DIR"/empty.png\" alt=\"\" width=\"600\" height=\"30\" />\n"
" <table bgcolor=\"#292928\" width=\"100%%\" cellpadding=\"0\" cellspacing=\"0\" border=\"0\" columns=\"2\">\n"
" <tr>\n"
" <td>\n"
@ -145,23 +190,25 @@ html_populate (CappletDirView *view)
" </table>\n"
#endif
" <table width=\"100%%\" columns=\"4\" cellpadding=\"4\" cellspacing=\"0\" border=\"0\">\n"
#if 0
" <tr height=\"64\">\n"
" <td colspan=\"4\">\n"
" Select something you want to customize.\n"
" </td>\n"
" <\tr>\n"
#endif
" <tr>\n"
" <td colspan=\"4\">\n"
" &nbsp;\n";
gtk_html_write (GTK_HTML (view->view), stream, s, strlen (s));
gtk_html_write (data->main, stream, s, strlen (s));
write_parent_html (view->capplet_dir->entry.dir, GTK_HTML (view->view), stream);
/* write_parent_html (view->capplet_dir->entry.dir, data->main, stream); */
for (i = 0, item = view->capplet_dir->entries; item; item = item->next, i++) {
if (!(i%2)) {
s = " <tr>\n";
gtk_html_write (GTK_HTML (view->view), stream, s, strlen (s));
gtk_html_write (data->main, stream, s, strlen (s));
}
entry = CAPPLET_DIR_ENTRY (item->data);
@ -174,36 +221,67 @@ html_populate (CappletDirView *view)
" </td>\n"
, entry->path, entry->icon, entry->path, entry->label, entry->entry->comment);
gtk_html_write (GTK_HTML (view->view), stream, s, strlen (s));
gtk_html_write (data->main, stream, s, strlen (s));
g_free (s);
if (i%2 || !item->next) {
s = " </tr>\n";
gtk_html_write (GTK_HTML (view->view), stream, s, strlen (s));
gtk_html_write (data->main, stream, s, strlen (s));
}
}
s =
" </table>\n"
" </p>\n"
" </body>\n"
"</html>\n";
gtk_html_write (GTK_HTML (view->view), stream, s, strlen (s));
gtk_html_write (data->main, stream, s, strlen (s));
gtk_html_end (GTK_HTML (view->view), stream, GTK_HTML_STREAM_OK);
gtk_html_end (data->main, stream, GTK_HTML_STREAM_OK);
}
static GtkWidget *
html_create (CappletDirView *view)
{
GtkWidget *w = gtk_html_new ();
GtkWidget *vbox;
HtmlViewData *data;
GtkWidget *sw;
gtk_signal_connect (GTK_OBJECT (w), "url_requested",
data = g_new (HtmlViewData, 1);
view->view_data = data;
vbox = gtk_vbox_new (FALSE, 0);
/* top widget */
data->top = GTK_HTML (gtk_html_new ());
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_NEVER,
GTK_POLICY_NEVER);
gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (data->top));
gtk_box_pack_start (GTK_BOX (vbox), sw, FALSE, FALSE, 0);
/* main widget */
data->main = GTK_HTML (gtk_html_new ());
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_NEVER,
GTK_POLICY_AUTOMATIC);
gtk_container_add (GTK_CONTAINER (sw), GTK_WIDGET (data->main));
gtk_box_pack_start (GTK_BOX (vbox), sw, TRUE, TRUE, 0);
gtk_signal_connect (GTK_OBJECT (data->top), "url_requested",
GTK_SIGNAL_FUNC (handle_url_cb), view);
gtk_signal_connect (GTK_OBJECT (w), "link_clicked",
gtk_signal_connect (GTK_OBJECT (data->main), "url_requested",
GTK_SIGNAL_FUNC (handle_url_cb), view);
gtk_signal_connect (GTK_OBJECT (data->main), "link_clicked",
GTK_SIGNAL_FUNC (handle_link_cb), view);
return w;
gtk_widget_show_all (vbox);
return vbox;
}
CappletDirViewImpl capplet_dir_view_html = {
@ -212,4 +290,3 @@ CappletDirViewImpl capplet_dir_view_html = {
html_populate,
html_create
};

View file

@ -31,17 +31,16 @@
static void
list_clear (CappletDirView *view)
{
g_return_if_fail (GNOME_IS_ICON_LIST (view->view));
g_return_if_fail (GNOME_IS_ICON_LIST (view->view_data));
gnome_icon_list_clear (GNOME_ICON_LIST (view->view));
gnome_icon_list_clear (GNOME_ICON_LIST (view->view_data));
}
static void
list_clean (CappletDirView *view)
{
g_return_if_fail (GNOME_IS_ICON_LIST (view->view));
gtk_object_destroy (GTK_OBJECT (view->view));
/* i think this can be a no-op now */
view->view_data = NULL;
}
/*
@ -103,23 +102,23 @@ list_populate (CappletDirView *view)
int i;
GnomeCanvasItem *item;
g_return_if_fail (GNOME_IS_ICON_LIST (view->view));
g_return_if_fail (GNOME_IS_ICON_LIST (view->view_data));
gnome_icon_list_freeze (GNOME_ICON_LIST (view->view));
gnome_icon_list_freeze (GNOME_ICON_LIST (view->view_data));
for (i = 0, list = view->capplet_dir->entries; list; list = list->next, i++) {
#if 0
item = flatten_alpha (CAPPLET_DIR_ENTRY (list->data)->pb,
GNOME_CANVAS (view->view));
gnome_icon_list_insert_item (GNOME_ICON_LIST (view->view), i, item,
GNOME_CANVAS (view->view_data));
gnome_icon_list_insert_item (GNOME_ICON_LIST (view->view_data), i, item,
CAPPLET_DIR_ENTRY (list->data)->label);
#else
gnome_icon_list_insert (GNOME_ICON_LIST (view->view), i,
gnome_icon_list_insert (GNOME_ICON_LIST (view->view_data), i,
CAPPLET_DIR_ENTRY (list->data)->icon,
CAPPLET_DIR_ENTRY (list->data)->label);
#endif
}
gnome_icon_list_thaw (GNOME_ICON_LIST (view->view));
gnome_icon_list_thaw (GNOME_ICON_LIST (view->view_data));
}
static void
@ -141,15 +140,18 @@ static GtkWidget *
list_create (CappletDirView *view)
{
GtkAdjustment *adjustment;
GtkWidget *w;
GtkWidget *w, *sw;
GSList *list;
int i;
adjustment = gtk_scrolled_window_get_vadjustment
(GTK_SCROLLED_WINDOW (view->scrolled_win));
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
w = gnome_icon_list_new (72, adjustment, 0);
view->view_data = w = gnome_icon_list_new (72, adjustment, 0);
if (view->selected)
view->capplet_dir = view->selected->dir;
@ -170,7 +172,11 @@ list_create (CappletDirView *view)
gtk_signal_connect (GTK_OBJECT (w), "select-icon",
GTK_SIGNAL_FUNC (select_icon_list_cb),
view);
return w;
gtk_container_add (GTK_CONTAINER (sw), w);
gtk_widget_show_all (sw);
return sw;
}
CappletDirViewImpl capplet_dir_view_list = {

View file

@ -29,17 +29,17 @@
static void
tree_clear (CappletDirView *view)
{
g_return_if_fail (GTK_IS_CTREE (view->view));
g_return_if_fail (GTK_IS_CTREE (view->view_data));
gtk_clist_clear (GTK_CLIST (view->view));
gtk_clist_clear (GTK_CLIST (view->view_data));
}
static void
tree_clean (CappletDirView *view)
{
g_return_if_fail (GTK_IS_CTREE (view->view));
g_return_if_fail (GTK_IS_CTREE (view->view_data));
gtk_object_destroy (GTK_OBJECT (view->view));
view->view_data = NULL;
}
static void
@ -80,11 +80,11 @@ populate_tree_branch (CappletDir *dir, GtkCTree *ctree, GtkCTreeNode *parent)
static void
tree_populate (CappletDirView *view)
{
g_return_if_fail (GTK_IS_CTREE (view->view));
g_return_if_fail (GTK_IS_CTREE (view->view_data));
gtk_clist_freeze (GTK_CLIST (view->view));
populate_tree_branch (view->capplet_dir, GTK_CTREE (view->view), NULL);
gtk_clist_thaw (GTK_CLIST (view->view));
gtk_clist_freeze (GTK_CLIST (view->view_data));
populate_tree_branch (view->capplet_dir, GTK_CTREE (view->view_data), NULL);
gtk_clist_thaw (GTK_CLIST (view->view_data));
}
static void
@ -122,12 +122,14 @@ static GtkWidget *
tree_create (CappletDirView *view)
{
GtkAdjustment *adjustment;
GtkWidget *w;
GtkWidget *w, *sw;
adjustment = gtk_scrolled_window_get_vadjustment
(GTK_SCROLLED_WINDOW (view->scrolled_win));
sw = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
w = gtk_ctree_new (1, 0);
view->view_data = w = gtk_ctree_new (1, 0);
gtk_signal_connect (GTK_OBJECT (w), "tree-select-row",
GTK_SIGNAL_FUNC (select_tree_cb),
@ -136,7 +138,10 @@ tree_create (CappletDirView *view)
GTK_SIGNAL_FUNC (tree_event_cb),
view);
return w;
gtk_container_add (GTK_CONTAINER (sw), w);
gtk_widget_show_all (sw);
return sw;
}
#if 0

View file

@ -52,6 +52,26 @@ enum {
};
static GList *window_list;
static gboolean authed;
static void
capplet_dir_view_update_authenticated (CappletDirView *view, gpointer null)
{
if (authed) {
gtk_widget_hide (view->rootm_locked);
gtk_widget_show (view->rootm_unlocked);
} else {
gtk_widget_hide (view->rootm_unlocked);
gtk_widget_show (view->rootm_locked);
}
}
void
capplet_dir_views_set_authenticated (gboolean amiauthedornot)
{
authed = amiauthedornot;
g_list_foreach (window_list, (GFunc)capplet_dir_view_update_authenticated, NULL);
}
static void
capplet_dir_view_init (CappletDirView *view)
@ -76,6 +96,11 @@ capplet_dir_view_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
if (layout == view->layout)
break;
g_assert (!view->changing_layout);
view->changing_layout = TRUE;
g_print ("layout: %p, %d\n", view, layout);
if (view->impl && view->impl->clean)
view->impl->clean (view);
@ -83,18 +108,23 @@ capplet_dir_view_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
view->impl = capplet_dir_view_impl[layout];
if (view->impl && view->impl->create) {
g_print ("1. %p\n", view->view);
view->view = view->impl->create (view);
gtk_container_add (GTK_CONTAINER (view->scrolled_win),
view->view);
g_print ("2. %p\n", view->view);
gnome_app_set_contents (view->app, view->view);
g_print ("3. %p\n", view->view);
if (view->capplet_dir && view->impl->populate)
view->impl->populate (view);
g_print ("4. %p\n", view->view);
#if 0
gtk_signal_connect (GTK_OBJECT (view->view), "destroy",
GTK_SIGNAL_FUNC (gtk_widget_destroyed),
&view->view);
#endif
g_print ("5. %p\n\n\n\n", view->view);
gtk_widget_show (view->view);
}
@ -111,6 +141,8 @@ capplet_dir_view_set_arg (GtkObject *object, GtkArg *arg, guint arg_id)
layout == LAYOUT_TREE);
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (view->html_toggle),
layout == LAYOUT_HTML);
view->changing_layout = FALSE;
break;
default:
break;
@ -211,7 +243,7 @@ exit_cb (GtkWidget *w, gpointer data)
static void
menu_cb (GtkWidget *w, CappletDirView *view, CappletDirViewLayout layout)
{
if (!GTK_CHECK_MENU_ITEM (w)->active)
if (!GTK_CHECK_MENU_ITEM (w)->active || view->changing_layout)
return;
gtk_object_set (GTK_OBJECT (view), "layout", layout, NULL);
@ -238,7 +270,7 @@ tree_menu_cb (GtkWidget *w, CappletDirView *view)
static void
button_cb (GtkWidget *w, CappletDirView *view, CappletDirViewLayout layout)
{
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)))
if (!gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (w)) || view->changing_layout)
return;
gtk_object_set (GTK_OBJECT (view), "layout", layout, NULL);
@ -273,8 +305,8 @@ about_menu_cb (GtkWidget *widget, CappletDirView *view)
{
static GtkWidget *about = NULL;
static gchar *authors[] = {
"Bradford Hovinen <hovinen@helixcode.com>",
"Jacob Berkman <jacob@helixcode.com>",
"Bradford Hovinen <hovinen@ximian.com>",
"Jacob Berkman <jacob@ximian.com>",
"Johnathan Blandford <jrb@redhat.com>",
NULL
};
@ -289,7 +321,7 @@ about_menu_cb (GtkWidget *widget, CappletDirView *view)
(_("GNOME Control Center"), VERSION,
_("Desktop properties manager."),
(const gchar **) authors,
"Copyright (C) 2000 Helix Code, Inc.\n"
"Copyright (C) 2000, 20001 Ximian, Inc.\n"
"Copyright (C) 1999 Red Hat Software, Inc.",
NULL);
@ -311,13 +343,7 @@ back_button_cb (GtkWidget *widget, CappletDirView *view)
static void
rootm_button_cb (GtkWidget *w, CappletDirView *view)
{
if (GTK_WIDGET_VISIBLE (view->rootm_locked)) {
gtk_widget_hide (view->rootm_locked);
gtk_widget_show (view->rootm_unlocked);
} else {
gtk_widget_hide (view->rootm_unlocked);
gtk_widget_show (view->rootm_locked);
}
gdk_beep ();
}
CappletDirView *
@ -335,8 +361,7 @@ capplet_dir_view_new (void)
window_list = g_list_append (window_list, view);
view->app = glade_xml_get_widget (xml, "main_window");
view->scrolled_win = glade_xml_get_widget (xml, "scrolled_window");
view->app = GNOME_APP (glade_xml_get_widget (xml, "main_window"));
view->up_button = glade_xml_get_widget (xml, "back_button");
view->parents_option = glade_xml_get_widget (xml, "parents_option");
view->html_toggle = glade_xml_get_widget (xml, "html_toggle");
@ -383,6 +408,8 @@ capplet_dir_view_new (void)
gtk_object_set (GTK_OBJECT (view), "layout", prefs->layout, NULL);
capplet_dir_view_update_authenticated (view, NULL);
return view;
}

View file

@ -46,7 +46,7 @@ struct _CappletDirViewImpl
/* remove entries from view */
CDVFunc clear;
/* clean up (destroy widgets */
/* clean up (destroy widgets) */
CDVFunc clean;
CDVFunc populate;
@ -66,12 +66,11 @@ struct _CappletDirView
CappletDirViewImpl *impl;
GtkWidget *view;
gpointer view_data;
gboolean destroyed;
CappletDirViewLayout layout;
GtkScrolledWindow *scrolled_win;
GtkWidget *up_button;
GtkWidget *parents_option;
@ -86,6 +85,8 @@ struct _CappletDirView
GtkWidget *rootm_button;
GtkWidget *rootm_locked;
GtkWidget *rootm_unlocked;
gboolean changing_layout;
};
struct _CappletDirViewClass
@ -101,6 +102,8 @@ void capplet_dir_view_destroy (CappletDirView *view);
void capplet_dir_view_load_dir (CappletDirView *view, CappletDir *dir);
void capplet_dir_view_show (CappletDirView *view);
void capplet_dir_views_set_authenticated (gboolean authed);
void gnomecc_init (void);
#endif /* __CAPPLET_DIR_VIEW */

View file

@ -325,8 +325,7 @@ start_capplet_through_root_manager (GnomeDesktopEntry *gde)
if (pid == (pid_t) -1) {
g_error ("%s", g_strerror (errno));
}
else if (pid == 0) {
} else if (pid == 0) {
char *arg[2];
int i;
@ -337,11 +336,11 @@ start_capplet_through_root_manager (GnomeDesktopEntry *gde)
arg[0] = gnome_is_program_in_path ("root-manager-helper");
arg[1] = NULL;
execv (arg[0], arg);
}
else
{
} else {
output = fdopen(pipe_fd[1], "a");
}
capplet_dir_views_set_authenticated (TRUE);
}

BIN
control-center/empty.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 B

BIN
control-center/foot.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -667,18 +667,9 @@
</widget>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<child_name>GnomeDock:contents</child_name>
<name>scrolled_window</name>
<hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<widget>
<class>Placeholder</class>
</widget>
<child_name>GnomeDock:contents</child_name>
</widget>
</widget>

BIN
control-center/left.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

BIN
control-center/left_top.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 519 B

View file

@ -34,8 +34,6 @@
int
main (int argc, char **argv)
{
CappletDirEntry *main_dir;
bindtextdomain (PACKAGE, GNOMELOCALEDIR);
textdomain (PACKAGE);

View file

@ -1,7 +1,12 @@
pixmapdir = $(datadir)/pixmaps
pixmap_DATA = xst-keys.png
INCLUDES = \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-I$(top_srcdir)/intl -I$(top_builddir)/intl \
-I$(includedir) $(shell gtk-config --cflags) \
@RMHELPER_CFLAGS@ \
-DUH_PATH=\""$(sbindir)/root-manager"\" \
-DUH_KEY_PIXMAP_PATH=\""$(pixmapdir)/xst-keys.png"\" \
-DDEBUG_USERHELPER
bin_PROGRAMS = root-manager-helper
@ -19,8 +24,6 @@ root_manager_LDFLAGS = $(shell glib-config --libs)
root_manager_helper_SOURCES = \
root-manager-helper.c \
root-manager-wrap.c \
root-manager-wrap.h \
userdialogs.c \
userdialogs.h
root-manager-wrap.h
root_manager_helper_LDFLAGS = $(shell gtk-config --libs)
root_manager_helper_LDFLAGS = @RMHELPER_LIBS@

View file

@ -1,4 +1,5 @@
/* Copyright (C) 1999 Red Hat Software, Inc.
* Copyright 2001 Ximian, Inc.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@ -23,8 +24,7 @@
#include <libintl.h>
#include <unistd.h>
#include <sys/types.h>
#include <gtk/gtk.h>
#include "userdialogs.h"
#include <gnome.h>
#include "root-manager-wrap.h"
void
@ -52,12 +52,18 @@ main(int argc, char* argv[])
argv_fake[1] = "0";
if (!gtk_init_check(&argc_fake, &argv_fake)) {
g_error ("Must be run with $DISPLAY");
fprintf (stderr, _("Could not connect to X Display"));
return -1;
}
new_fd = dup (STDIN_FILENO);
if (new_fd < 0)
g_error ("error dup()'ing");
if (new_fd < 0) {
fprintf (stderr, _("Could not duplicate file descriptor"));
return -1;
}
gnome_init ("root-manager-helper", VERSION, argc_fake, argv_fake);
gdk_rgb_init ();
signal(SIGCHLD, userhelper_fatal_error);
@ -65,7 +71,5 @@ main(int argc, char* argv[])
gtk_main();
g_print ("back...\n");
return 0;
}

View file

@ -1,5 +1,6 @@
/* -*-Mode: c-*- */
/* Copyright (C) 1997 Red Hat Software, Inc.
* Copyright 2001 Ximian, Inc.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@ -16,16 +17,22 @@
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <config.h>
#include <unistd.h>
#include <locale.h>
#include <libintl.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <gdk/gdkx.h>
#include <gnome.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gnome-canvas-pixbuf.h>
#include "root-manager-wrap.h"
#include "userdialogs.h"
#define MAXLINE 512
@ -142,54 +149,51 @@ userhelper_parse_exitstatus(int exitstatus)
switch(exitstatus)
{
case 0:
message_box = create_message_box(_("Information updated."), NULL);
message_box = gnome_ok_dialog (_("Information updated."));
break;
case ERR_PASSWD_INVALID:
message_box = create_error_box(_("The password you typed is invalid.\nPlease try again."), NULL);
message_box = gnome_error_dialog(_("The password you typed is invalid.\nPlease try again."));
break;
case ERR_FIELDS_INVALID:
message_box = create_error_box(_("One or more of the changed fields is invalid.\nThis is probably due to either colons or commas in one of the fields.\nPlease remove those and try again."), NULL);
message_box = gnome_error_dialog(_("One or more of the changed fields is invalid.\nThis is probably due to either colons or commas in one of the fields.\nPlease remove those and try again."));
break;
case ERR_SET_PASSWORD:
message_box = create_error_box(_("Password resetting error."), NULL);
message_box = gnome_error_dialog(_("Password resetting error."));
break;
case ERR_LOCKS:
message_box = create_error_box(_("Some systems files are locked.\nPlease try again in a few moments."), NULL);
message_box = gnome_error_dialog(_("Some systems files are locked.\nPlease try again in a few moments."));
break;
case ERR_NO_USER:
message_box = create_error_box(_("Unknown user."), NULL);
message_box = gnome_error_dialog(_("Unknown user."));
break;
case ERR_NO_RIGHTS:
message_box = create_error_box(_("Insufficient rights."), NULL);
message_box = gnome_error_dialog(_("Insufficient rights."));
break;
case ERR_INVALID_CALL:
message_box = create_error_box(_("Invalid call to sub process."), NULL);
message_box = gnome_error_dialog(_("Invalid call to sub process."));
break;
case ERR_SHELL_INVALID:
message_box = create_error_box(_("Your current shell is not listed in /etc/shells.\nYou are not allowed to change your shell.\nConsult your system administrator."), NULL);
message_box = gnome_error_dialog(_("Your current shell is not listed in /etc/shells.\nYou are not allowed to change your shell.\nConsult your system administrator."));
break;
case ERR_NO_MEMORY:
/* well, this is unlikely to work either, but at least we tried... */
message_box = create_error_box(_("Out of memory."), NULL);
message_box = gnome_error_dialog(_("Out of memory."));
break;
case ERR_EXEC_FAILED:
message_box = create_error_box(_("The exec() call failed."), NULL);
message_box = gnome_error_dialog(_("The exec() call failed."));
break;
case ERR_NO_PROGRAM:
message_box = create_error_box(_("Failed to find selected program."), NULL);
message_box = gnome_error_dialog(_("Failed to find selected program."));
break;
case ERR_UNK_ERROR:
message_box = create_error_box(_("Unknown error."), NULL);
message_box = gnome_error_dialog(_("Unknown error."));
break;
default:
message_box = create_error_box(_("Unknown exit code."), NULL);
message_box = gnome_error_dialog(_("Unknown exit code."));
break;
}
gtk_signal_connect(GTK_OBJECT(message_box), "destroy", (GtkSignalFunc) userhelper_fatal_error, NULL);
gtk_signal_connect(GTK_OBJECT(message_box), "delete_event", (GtkSignalFunc) userhelper_fatal_error, NULL);
gtk_widget_show(message_box);
gnome_dialog_run_and_close (GNOME_DIALOG (message_box));
}
static void
@ -211,6 +215,41 @@ mark_void(GtkWidget *widget, gpointer target)
}
}
GtkWidget *
make_pixmap (const char *filename)
{
GdkPixbuf *pb;
GtkWidget *canvas;
GtkWidget *frame;
int width, height;
pb = gdk_pixbuf_new_from_file (filename);
if (!pb)
return NULL;
width = gdk_pixbuf_get_width (pb);
height = gdk_pixbuf_get_height (pb);
frame = gtk_frame_new (NULL);
gtk_widget_set_usize (frame, width, height);
gtk_widget_push_visual (gdk_rgb_get_visual ());
gtk_widget_push_colormap (gdk_rgb_get_cmap ());
canvas = gnome_canvas_new_aa ();
gtk_widget_pop_colormap ();
gtk_widget_pop_visual ();
gnome_canvas_set_scroll_region (GNOME_CANVAS (canvas), 0, 0, width, height);
gnome_canvas_item_new (GNOME_CANVAS_GROUP (GNOME_CANVAS (canvas)->root),
GNOME_TYPE_CANVAS_PIXBUF, "pixbuf", pb, NULL);
gtk_container_add (GTK_CONTAINER (frame), canvas);
gtk_widget_show_all (frame);
return frame;
}
void
userhelper_parse_childout(char* outline)
{
@ -219,7 +258,8 @@ userhelper_parse_childout(char* outline)
char *title;
int prompt_type;
static response *resp = NULL;
GdkPixmap *pixmap;
GtkWidget *pixmap;
int ret;
if (resp != NULL) {
if(!GTK_IS_WINDOW(resp->top)) {
@ -230,47 +270,41 @@ userhelper_parse_childout(char* outline)
}
if (resp == NULL) {
GtkWidget *vbox, *hbox, *sbox;
GtkWidget *hbox;
resp = g_malloc0(sizeof(response));
resp->user = g_strdup(getlogin());
resp->top = gtk_window_new(GTK_WINDOW_DIALOG);
gtk_signal_connect(GTK_OBJECT(resp->top), "destroy",
GTK_SIGNAL_FUNC(mark_void), &resp->top);
gtk_window_set_title(GTK_WINDOW(resp->top), _("Input"));
resp->top = gnome_dialog_new (_("Input"),
GNOME_STOCK_BUTTON_OK,
GNOME_STOCK_BUTTON_CANCEL,
NULL);
gnome_dialog_close_hides (GNOME_DIALOG (resp->top), TRUE);
gnome_dialog_set_default (GNOME_DIALOG (resp->top), 0);
gtk_window_position(GTK_WINDOW(resp->top), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(resp->top), 5);
gtk_signal_connect(GTK_OBJECT(resp->top), "map",
GTK_SIGNAL_FUNC(userhelper_grab_focus), NULL);
hbox = gtk_hbox_new (FALSE, GNOME_PAD_BIG);
gtk_box_pack_start (GTK_BOX (GNOME_DIALOG (resp->top)->vbox), hbox, FALSE, FALSE, 0);
pixmap = make_pixmap (UH_KEY_PIXMAP_PATH);
if(pixmap != NULL) {
gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, FALSE, 0);
}
resp->table = gtk_table_new (1, 2, FALSE);
resp->rows = 1;
vbox = gtk_vbox_new(FALSE, 4);
sbox = gtk_hbox_new(TRUE, 4);
hbox = gtk_hbutton_box_new();
gtk_object_set_data(GTK_OBJECT(resp->top), UH_ACTION_AREA, hbox);
gtk_box_pack_start(GTK_BOX(vbox), resp->table, TRUE, TRUE, 4);
gtk_box_pack_start(GTK_BOX(vbox), gtk_hseparator_new(), FALSE, FALSE, 4);
gtk_box_pack_start(GTK_BOX(vbox), sbox, FALSE, FALSE, 4);
gtk_box_pack_start(GTK_BOX(sbox), hbox, FALSE, FALSE, 4);
gtk_container_add(GTK_CONTAINER(resp->top), vbox);
pixmap = gdk_pixmap_create_from_xpm(gdk_window_foreign_new(GDK_ROOT_WINDOW()),
NULL, NULL, UH_KEY_PIXMAP_PATH);
if(pixmap != NULL) {
GtkWidget *pm = gtk_pixmap_new(pixmap, NULL);
if(pm != NULL) {
GtkWidget *frame = NULL;
frame = gtk_frame_new(NULL);
gtk_container_add(GTK_CONTAINER(frame), pm);
gtk_table_attach(GTK_TABLE(resp->table), frame,
0, 1, 1, 2, GTK_SHRINK, GTK_SHRINK, 2, 2);
resp->left = 1;
}
}
gtk_box_pack_start(GTK_BOX(hbox), resp->table, TRUE, TRUE, GNOME_PAD);
#if 0
resp->ok = gtk_button_new_with_label(_(UD_OK_TEXT));
gtk_misc_set_padding(GTK_MISC(GTK_BIN(resp->ok)->child), 4, 0);
gtk_box_pack_start(GTK_BOX(hbox), resp->ok, FALSE, FALSE, 0);
@ -286,8 +320,10 @@ userhelper_parse_childout(char* outline)
gtk_signal_connect(GTK_OBJECT(resp->ok), "clicked",
(GtkSignalFunc) userhelper_write_childin, resp);
#endif
gtk_object_set_user_data(GTK_OBJECT(resp->top), resp);
gtk_widget_show_all (hbox);
}
if(isdigit(outline[0])) {
@ -372,15 +408,16 @@ userhelper_parse_childout(char* outline)
break;
case UH_SERVICE_NAME:
title = g_strdup_printf(_("In order to run \"%s\" with root's "
"privileges, additional information is "
"required."),
prompt);
title = _("In order to make changes to your system, you\n"
"must enter the administrator (root) password.");
msg->label = gtk_label_new(title);
gtk_misc_set_alignment (GTK_MISC (msg->label), 0.5, 0.0);
gtk_label_set_line_wrap(GTK_LABEL(msg->label), FALSE);
gtk_table_attach(GTK_TABLE(resp->table), msg->label,
0, resp->left + 2, 0, 1,
GTK_EXPAND | GTK_FILL, 0, 2, 2);
GTK_EXPAND | GTK_FILL,
GTK_EXPAND | GTK_FILL, 2, 2);
resp->message_list = g_slist_append(resp->message_list, msg);
break;
@ -405,6 +442,8 @@ userhelper_parse_childout(char* outline)
}
if (resp->fallback) {
gnome_dialog_append_button (GNOME_DIALOG (resp->top), _("Run Unprivileged"));
#if 0
gpointer a = GTK_WIDGET(gtk_object_get_data(GTK_OBJECT(resp->top),
UH_ACTION_AREA));
GtkWidget *hbox = GTK_WIDGET(a);
@ -417,16 +456,22 @@ userhelper_parse_childout(char* outline)
gtk_signal_connect(GTK_OBJECT(resp->unprivileged), "clicked",
GTK_SIGNAL_FUNC(userhelper_write_childin), resp);
}
#endif
}
gtk_widget_show_all(resp->top);
/* here is where we do the thingie */
gtk_widget_show_all (resp->table);
if(GTK_IS_ENTRY(resp->head)) {
gtk_widget_grab_focus(resp->head);
}
if(GTK_IS_ENTRY(resp->tail)) {
gtk_signal_connect_object(GTK_OBJECT(resp->tail), "activate",
gtk_button_clicked, GTK_OBJECT(resp->ok));
gnome_dialog_editable_enters (GNOME_DIALOG (resp->top),
GTK_EDITABLE (resp->tail));
}
ret = gnome_dialog_run_and_close (GNOME_DIALOG (resp->top));
userhelper_write_childin (ret, resp);
break;
default:
/* ignore, I guess... */
@ -468,14 +513,15 @@ userhelper_read_childout(gpointer data, int source, GdkInputCondition cond)
}
void
userhelper_write_childin(GtkWidget *widget, response *resp)
userhelper_write_childin(int button, response *resp)
{
char* input;
int len;
guchar byte;
GSList *message_list = resp->message_list;
if(widget == resp->unprivileged) {
switch (button) {
case 2:
byte = UH_ABORT;
for (message_list = resp->message_list;
(message_list != NULL) && (message_list->data != NULL);
@ -489,8 +535,8 @@ userhelper_write_childin(GtkWidget *widget, response *resp)
write(childin[1], "\n", 1);
}
}
}
if(widget == resp->ok) {
break;
case 0:
byte = UH_TEXT;
for (message_list = resp->message_list;
(message_list != NULL) && (message_list->data != NULL);
@ -507,6 +553,10 @@ userhelper_write_childin(GtkWidget *widget, response *resp)
write(childin[1], "\n", 1);
}
}
break;
default:
gtk_main_quit ();
break;
}
gtk_widget_destroy(resp->top);
}

View file

@ -1,4 +1,5 @@
/* Copyright (C) 1997-1999 Red Hat Software, Inc.
* Copyright 2001 Ximian, Inc.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@ -19,7 +20,6 @@
#define __USERHELPER_WRAP_H__
/* lots 'o includes. */
#include "userdialogs.h"
#include <signal.h>
#include <unistd.h>
#include <errno.h>
@ -59,7 +59,7 @@ void userhelper_runv(char *path, int new_fd);
void userhelper_parse_exitstatus(int exitstatus);
void userhelper_parse_childout();
void userhelper_read_childout(gpointer data, int source, GdkInputCondition cond);
void userhelper_write_childin(GtkWidget* widget, response *resp);
void userhelper_write_childin(int button, response *resp);
void userhelper_sigchld(); /* sigchld handler */

View file

@ -1,5 +1,6 @@
/* -*-Mode: c-*- */
/* Copyright (C) 1997 Red Hat Software, Inc.
* Copyright 2001 Ximian Inc.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@ -57,6 +58,8 @@
#include "root-manager.h"
#include "shvar.h"
#define _(s) gettext(s)
/* Total GECOS field length... is this enough ? */
#define GECOS_LENGTH 80
@ -438,12 +441,16 @@ int main(int argc, char *argv[])
exit(ERR_NO_RIGHTS);
}
if (argc < 2)
g_error ("Usage: root-helper fd");
if (argc < 2) {
fprintf(stderr, _("Usage: root-helper fd"));
exit(ERR_INVALID_CALL);
}
fd = atoi (argv[1]);
if (fd <= STDERR_FILENO)
g_error ("Usage: root-helper fd");
if (fd <= STDERR_FILENO) {
fprintf (stderr, _("Usage: root-helper fd"));
exit(ERR_INVALID_CALL);
}
#ifdef DEBUG_USERHELPER
fprintf (stderr, "fd is %d\n", fd);
@ -598,6 +605,7 @@ int main(int argc, char *argv[])
#define BUFSIZE 1024
{
char buf[BUFSIZE];
fprintf (stdout, "success\n");
#ifdef DEBUG_USERHELPER
fprintf (stderr, "looping for input\n");
#endif
@ -615,7 +623,7 @@ int main(int argc, char *argv[])
"/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/root/bin", 1);
execv (args[0], args);
g_error ("s", g_strerror (errno));
g_error ("%s", g_strerror (errno));
}
}
}
@ -680,7 +688,7 @@ int main(int argc, char *argv[])
"/usr/sbin:/usr/bin:/sbin:/bin:/usr/X11R6/bin:/root/bin", 1);
execv (args[0], args);
g_error ("s", g_strerror (errno));
g_error ("%s", g_strerror (errno));
}
}
}

View file

@ -1,4 +1,5 @@
/* Copyright (C) 1997-1999 Red Hat Software, Inc.
* Copyright 2001 Ximian, Inc.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by
@ -18,8 +19,6 @@
#ifndef __USERHELPER_H__
#define __USERHELPER_H__
#define _(String) gettext(String)
#define UH_ECHO_ON_PROMPT 1
#define UH_ECHO_OFF_PROMPT 2
#define UH_INFO_MSG 3
@ -46,8 +45,8 @@
#define ERR_EXEC_FAILED 11 /* exec failed for some reason */
#define ERR_UNK_ERROR 255 /* unknown error */
#define UH_PATH "/gnome/sbin/root-manager"
#define UH_KEY_PIXMAP_PATH "/usr/share/pixmaps/userhelper-keys.xpm"
/*#define UH_PATH "./root-manager"*/
#ifndef _
#define _(s) gettext(s)
#endif
#endif /* __USERHELPER_H__ */

View file

@ -1,229 +0,0 @@
/* -*-Mode: c-*- */
/* Copyright (C) 1997 Red Hat Software, Inc.
*
* This 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#include <locale.h>
#include <libintl.h>
#define _(String) gettext(String)
#include "userdialogs.h"
GtkWidget*
create_message_box(gchar* message, gchar* title)
{
GtkWidget* message_box;
GtkWidget* label;
GtkWidget* hbox;
GtkWidget* ok;
message_box = gtk_dialog_new();
gtk_window_position(GTK_WINDOW(message_box), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(message_box), 5);
if(title == NULL)
gtk_window_set_title(GTK_WINDOW(message_box), _("Message"));
else
gtk_window_set_title(GTK_WINDOW(message_box), title);
label = gtk_label_new(message);
hbox = gtk_hbox_new(TRUE, 5);
ok = gtk_button_new_with_label(_(UD_OK_TEXT));
gtk_misc_set_padding(GTK_MISC(GTK_BIN(ok)->child), 4, 0);
gtk_signal_connect_object(GTK_OBJECT(ok), "clicked",
(GtkSignalFunc) gtk_widget_destroy,
(gpointer) message_box);
gtk_widget_set_usize(ok, 50, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(message_box)->vbox), hbox,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(message_box)->action_area), ok,
FALSE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok);
gtk_widget_show(ok);
gtk_widget_show(label);
gtk_widget_show(hbox);
gtk_widget_show(message_box);
return message_box;
}
/* conslidate error_box and message_box.. they're the same damn thing
* with a different default title.
*/
GtkWidget*
create_error_box(gchar* error, gchar* title)
{
GtkWidget* error_box;
GtkWidget* label;
GtkWidget* hbox;
GtkWidget* ok;
error_box = gtk_dialog_new();
gtk_window_position(GTK_WINDOW(error_box), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(error_box), 5);
if(title == NULL)
gtk_window_set_title(GTK_WINDOW(error_box), _("Error"));
else
gtk_window_set_title(GTK_WINDOW(error_box), title);
label = gtk_label_new(error);
hbox = gtk_hbox_new(TRUE, 5);
ok = gtk_button_new_with_label(_(UD_OK_TEXT));
gtk_misc_set_padding(GTK_MISC(GTK_BIN(ok)->child), 4, 0);
gtk_signal_connect_object(GTK_OBJECT(ok), "clicked",
(GtkSignalFunc) gtk_widget_destroy,
(gpointer) error_box);
gtk_widget_set_usize(ok, 50, 0);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(error_box)->vbox), hbox,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(error_box)->action_area), ok,
FALSE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok);
gtk_widget_show(ok);
gtk_widget_show(label);
gtk_widget_show(hbox);
gtk_widget_show(error_box);
return error_box;
}
GtkWidget*
create_query_box(gchar* prompt, gchar* title, GtkSignalFunc func)
{
GtkWidget* query_box;
GtkWidget* label;
GtkWidget* entry;
GtkWidget* hbox;
GtkWidget* ok;
query_box = gtk_dialog_new();
gtk_window_position(GTK_WINDOW(query_box), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(query_box), 5);
if(title == NULL)
gtk_window_set_title(GTK_WINDOW(query_box), _("Prompt"));
else
gtk_window_set_title(GTK_WINDOW(query_box), _("Prompt"));
label = gtk_label_new(prompt);
entry = gtk_entry_new();
ok = gtk_button_new_with_label(_(UD_OK_TEXT));
gtk_misc_set_padding(GTK_MISC(GTK_BIN(ok)->child), 4, 0);
gtk_widget_set_usize(ok, 50, 0);
hbox = gtk_hbox_new(TRUE, 0);
gtk_signal_connect_object(GTK_OBJECT(entry), "activate",
(GtkSignalFunc) gtk_button_clicked,
(gpointer) GTK_BUTTON(ok));
/* FIXME: memory leak... well, not really. Just rely on the caller
* to free the widget... 'cept that's not nice either. :-S
*/
gtk_signal_connect_object(GTK_OBJECT(ok), "clicked",
(GtkSignalFunc) gtk_widget_hide,
(gpointer) query_box);
if(func != NULL)
{
gtk_signal_connect(GTK_OBJECT(ok), "clicked", func, entry);
}
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->vbox), label,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->vbox), hbox,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->action_area), ok,
TRUE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok);
gtk_widget_grab_focus(entry);
gtk_widget_show(ok);
gtk_widget_show(label);
gtk_widget_show(entry);
gtk_widget_show(hbox);
gtk_widget_show(query_box);
return query_box;
}
GtkWidget*
create_invisible_query_box(gchar* prompt, gchar* title, GtkSignalFunc func)
{
GtkWidget* query_box;
GtkWidget* label;
GtkWidget* entry;
GtkWidget* hbox;
GtkWidget* ok;
query_box = gtk_dialog_new();
gtk_window_position(GTK_WINDOW(query_box), GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(query_box), 5);
gtk_window_set_title(GTK_WINDOW(query_box), _("Prompt"));
/* gtk_container_border_width(GTK_CONTAINER(GTK_DIALOG(query_box)->vbox), 5); */
label = gtk_label_new(prompt);
entry = gtk_entry_new();
gtk_entry_set_visibility(GTK_ENTRY(entry), FALSE);
hbox = gtk_hbox_new(TRUE, 5);
ok = gtk_button_new_with_label(_("OK"));
gtk_misc_set_padding(GTK_MISC(GTK_BIN(ok)->child), 4, 0);
gtk_signal_connect_object(GTK_OBJECT(entry), "activate",
(GtkSignalFunc) gtk_button_clicked,
(gpointer) GTK_BUTTON(ok));
gtk_signal_connect_object(GTK_OBJECT(ok), "clicked",
(GtkSignalFunc) gtk_widget_hide,
(gpointer) query_box);
gtk_widget_set_usize(ok, 50, 0);
if(func != NULL)
{
gtk_signal_connect(GTK_OBJECT(ok), "clicked", func, entry);
}
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->vbox), label,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->vbox), hbox,
FALSE, FALSE, 5);
gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 5);
gtk_box_pack_start(GTK_BOX(GTK_DIALOG(query_box)->action_area), ok,
TRUE, FALSE, 0);
GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
gtk_widget_grab_default(ok);
gtk_widget_grab_focus(entry);
gtk_widget_show(ok);
gtk_widget_show(label);
gtk_widget_show(entry);
gtk_widget_show(hbox);
gtk_widget_show(query_box);
return query_box;
}

View file

@ -1,42 +0,0 @@
/* -*-Mode: c-*- */
/* Copyright (C) 1997 Red Hat Software, Inc.
*
* This 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __USERDIALOGS_H__
#define __USERDIALOGS_H__
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
#include <locale.h>
#include <libintl.h>
#define i18n(String) gettext(String)
#define N_(String) String
#define UD_OK_TEXT N_("OK")
#define UD_HELP_TEXT N_("Help")
#define UD_CANCEL_TEXT N_("Cancel")
#define UD_EXIT_TEXT N_("Exit")
#define UD_FALLBACK_TEXT N_("Run Unprivileged")
/* consider a "has args" arg, so I can use the arg argument or not at will */
GtkWidget* create_message_box(gchar* message, gchar* title);
GtkWidget* create_error_box(gchar* error, gchar* title);
GtkWidget* create_query_box(gchar* prompt, gchar* title, GtkSignalFunc func);
GtkWidget* create_invisible_query_box(gchar* prompt, gchar* title,
GtkSignalFunc func);
#endif /* __USERDIALOGS_H__ */

BIN
root-manager/xst-keys.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB