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
14
ChangeLog
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
|
@ -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
After Width: | Height: | Size: 109 B |
BIN
control-center/bgtop.png
Normal file
After Width: | Height: | Size: 396 B |
|
@ -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"
|
||||
" \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
|
||||
};
|
||||
|
||||
|
|
|
@ -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 = {
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
After Width: | Height: | Size: 108 B |
BIN
control-center/foot.png
Normal file
After Width: | Height: | Size: 11 KiB |
|
@ -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
After Width: | Height: | Size: 1.5 KiB |
BIN
control-center/left_top.png
Normal file
After Width: | Height: | Size: 519 B |
|
@ -34,8 +34,6 @@
|
|||
int
|
||||
main (int argc, char **argv)
|
||||
{
|
||||
CappletDirEntry *main_dir;
|
||||
|
||||
bindtextdomain (PACKAGE, GNOMELOCALEDIR);
|
||||
textdomain (PACKAGE);
|
||||
|
||||
|
|
|
@ -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@
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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 */
|
||||
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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__ */
|
||||
|
|
|
@ -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;
|
||||
}
|
|
@ -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
After Width: | Height: | Size: 3.7 KiB |