int main (int argc, char *argv[]) { GtkWidget *dialog; GtkWidget *browse_button; GtkWidget *help_button; GtkWidget *face_image; char *greeter; int max_size; bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); textdomain (GETTEXT_PACKAGE); gtk_init(&argc, &argv); photofile = g_build_filename (g_get_home_dir (), ".face", NULL); /* Read config data in bulk */ mdmcomm_comm_bulk_start (); max_size = mdm_config_get_int (MDM_KEY_USER_MAX_FILE); max_width = mdm_config_get_int (MDM_KEY_MAX_ICON_WIDTH); max_height = mdm_config_get_int (MDM_KEY_MAX_ICON_HEIGHT); greeter = mdm_config_get_string (MDM_KEY_GREETER); facedir = mdm_config_get_string (MDM_KEY_GLOBAL_FACE_DIR); /* At this point we are done using the socket, so close it */ mdmcomm_comm_bulk_stop (); imagename = NULL; gtk_window_set_default_icon_name ("stock_person"); xml = glade_xml_new (MDM_GLADE_DIR "/mdmphotosetup.glade", NULL, NULL); dialog = glade_xml_get_widget (xml, "face_dialog"); face_image = glade_xml_get_widget (xml, "face_image"); browse_button = glade_xml_get_widget (xml, "browse_button"); help_button = glade_xml_get_widget (xml, "helpbutton1"); gtk_widget_set_size_request (browse_button, MAX (max_width, 230), MAX (max_height, 130)); if (g_access (photofile, R_OK) == 0) { gtk_image_set_from_file (GTK_IMAGE (face_image), photofile); } else { gtk_image_set_from_icon_name (GTK_IMAGE (face_image), "stock_person", GTK_ICON_SIZE_DIALOG); } g_signal_connect (browse_button, "clicked", G_CALLBACK (browse_button_cb), dialog); g_signal_connect (help_button, "clicked", G_CALLBACK (help_button_cb), dialog); g_signal_connect (dialog, "response", G_CALLBACK (dialog_response), NULL); gtk_widget_show_all (dialog); gtk_main (); return 0; }
gboolean mdm_common_is_action_available (gchar *action) { gchar **allowsyscmd = NULL; const gchar *allowsyscmdval; gboolean ret = FALSE; int i; allowsyscmdval = mdm_config_get_string (MDM_KEY_SYSTEM_COMMANDS_IN_MENU); if (allowsyscmdval) allowsyscmd = g_strsplit (allowsyscmdval, ";", 0); if (allowsyscmd) { for (i = 0; allowsyscmd[i] != NULL; i++) { if (strcmp (allowsyscmd[i], action) == 0) { ret = TRUE; break; } } } #ifdef HAVE_CHKAUTHATTR if (ret == TRUE) { gchar **rbackeys = NULL; const gchar *rbackeysval; const char *mdmuser; mdmuser = mdm_config_get_string (MDM_KEY_USER); rbackeysval = mdm_config_get_string (MDM_KEY_RBAC_SYSTEM_COMMAND_KEYS); if (rbackeysval) rbackeys = g_strsplit (rbackeysval, ";", 0); if (rbackeys) { for (i = 0; rbackeys[i] != NULL; i++) { gchar **rbackey = g_strsplit (rbackeys[i], ":", 2); if (mdm_vector_len (rbackey) == 2 && ! ve_string_empty (rbackey[0]) && ! ve_string_empty (rbackey[1]) && strcmp (rbackey[0], action) == 0) { if (!chkauthattr (rbackey[1], mdmuser)) { g_strfreev (rbackey); ret = FALSE; break; } } g_strfreev (rbackey); } } g_strfreev (rbackeys); } #endif g_strfreev (allowsyscmd); return ret; }
static void mdm_greeter_users_init (void) { gint size_of_users = 0; defface = mdm_common_get_face (NULL, mdm_config_get_string (MDM_KEY_DEFAULT_FACE), mdm_config_get_int (MDM_KEY_MAX_ICON_WIDTH), mdm_config_get_int (MDM_KEY_MAX_ICON_HEIGHT)); if (! defface) { mdm_common_warning ("Can't open DefaultImage: %s!", mdm_config_get_string (MDM_KEY_DEFAULT_FACE)); } mdm_users_init (&users, &users_string, NULL, defface, &size_of_users, MDM_IS_LOCAL, !DOING_MDM_DEVELOPMENT); }
void greeter_item_timed_start (void) { int timeddelay = mdm_config_get_int (MDM_KEY_TIMED_LOGIN_DELAY); if (timed_handler_id == 0 && mdm_config_get_bool (MDM_KEY_TIMED_LOGIN_ENABLE) && ! ve_string_empty (mdm_config_get_string (MDM_KEY_TIMED_LOGIN)) && timeddelay > 0) { mdm_timed_delay = timeddelay; timed_handler_id = g_timeout_add (1000, mdm_timer, NULL); } }
/* Callback function for list style custom lists */ static void list_selected (GtkTreeSelection *selection, GreeterItemInfo *item) { GtkTreeModel *tm = NULL; GtkTreeIter iter = {0}; char *id = NULL; char *file; if (ve_string_empty (item->id)) return; if (gtk_tree_selection_get_selected (selection, &tm, &iter)) { gtk_tree_model_get (tm, &iter, GREETER_LIST_ID, &id, -1); } /* * Note for session and language we are using the id to store the * value to pass in. */ if (strcmp (item->id, "session") == 0) { if (id != NULL) greeter_set_session (id); } else if (strcmp (item->id, "language") == 0) { if (id != NULL) mdm_lang_set_restart_dialog (id); } else { if (DOING_MDM_DEVELOPMENT) return; file = g_strdup_printf ("%s/%s.GreeterInfo", ve_sure_string (mdm_config_get_string (MDM_KEY_SERV_AUTHDIR)), ve_sure_string (g_getenv ("DISPLAY"))); mdm_save_customlist_data (file, item->id, id); } }
gboolean greeter_item_timed_setup (void) { /* if in timed mode, delay timeout on keyboard or menu activity */ if ( ! ve_string_empty (mdm_config_get_string (MDM_KEY_TIMED_LOGIN))) { guint sid; g_type_class_ref (GTK_TYPE_MENU_ITEM); sid = g_signal_lookup ("activate", GTK_TYPE_MENU_ITEM); g_signal_add_emission_hook (sid, 0 /* detail */, mdm_timer_up_delay, NULL /* data */, NULL /* destroy_notify */); sid = g_signal_lookup ("key_press_event", GTK_TYPE_WIDGET); g_signal_add_emission_hook (sid, 0 /* detail */, mdm_timer_up_delay, NULL /* data */, NULL /* destroy_notify */); sid = g_signal_lookup ("button_press_event", GTK_TYPE_WIDGET); g_signal_add_emission_hook (sid, 0 /* detail */, mdm_timer_up_delay, NULL /* data */, NULL /* destroy_notify */); } return TRUE; }
static void greeter_system_handler (GreeterItemInfo *info, gpointer user_data) { GtkWidget *w = NULL; GtkWidget *hbox = NULL; GtkWidget *main_vbox = NULL; GtkWidget *vbox = NULL; GtkWidget *cat_vbox = NULL; GtkWidget *group_radio = NULL; GtkWidget *halt_radio = NULL; GtkWidget *suspend_radio = NULL; GtkWidget *restart_radio = NULL; GtkWidget *config_radio = NULL; gchar *s; int ret; gint i; GSList *radio_group = NULL; static GtkTooltips *tooltips = NULL; /* should never be allowed by the UI */ if ( ! mdm_config_get_bool (MDM_KEY_SYSTEM_MENU) || ve_string_empty (g_getenv ("MDM_IS_LOCAL"))) return; dialog = gtk_dialog_new (); if (tooltips == NULL) tooltips = gtk_tooltips_new (); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); gtk_dialog_set_has_separator (GTK_DIALOG (dialog), FALSE); main_vbox = gtk_vbox_new (FALSE, 18); gtk_container_set_border_width (GTK_CONTAINER (main_vbox), 5); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), main_vbox, FALSE, FALSE, 0); cat_vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (main_vbox), cat_vbox, FALSE, FALSE, 0); s = g_strdup_printf ("<b>%s</b>", _("Choose an Action")); w = gtk_label_new (s); gtk_label_set_use_markup (GTK_LABEL (w), TRUE); g_free (s); gtk_misc_set_alignment (GTK_MISC (w), 0.0, 0.5); gtk_box_pack_start (GTK_BOX (cat_vbox), w, FALSE, FALSE, 0); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (cat_vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (hbox), gtk_label_new (" "), FALSE, FALSE, 0); vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox), vbox, TRUE, TRUE, 0); if (MdmHaltFound) { if (group_radio != NULL) radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio)); halt_radio = gtk_radio_button_new_with_mnemonic (radio_group, _("Shut _down the computer")); group_radio = halt_radio; gtk_tooltips_set_tip (tooltips, GTK_WIDGET (halt_radio), _("Shut Down your computer so that " "you may turn it off."), NULL); g_signal_connect (G_OBJECT(halt_radio), "button_press_event", G_CALLBACK(radio_button_press_event), NULL); gtk_box_pack_start (GTK_BOX (vbox), halt_radio, FALSE, FALSE, 4); gtk_widget_show (halt_radio); } if (MdmRebootFound) { if (group_radio != NULL) radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio)); restart_radio = gtk_radio_button_new_with_mnemonic (radio_group, _("_Restart the computer")); group_radio = restart_radio; gtk_tooltips_set_tip (tooltips, GTK_WIDGET (restart_radio), _("Restart your computer"), NULL); g_signal_connect (G_OBJECT(restart_radio), "button_press_event", G_CALLBACK(radio_button_press_event), NULL); gtk_box_pack_start (GTK_BOX (vbox), restart_radio, FALSE, FALSE, 4); gtk_widget_show (restart_radio); } if (MdmSuspendFound) { if (group_radio != NULL) radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio)); suspend_radio = gtk_radio_button_new_with_mnemonic (radio_group, _("Sus_pend the computer")); group_radio = suspend_radio; gtk_tooltips_set_tip (tooltips, GTK_WIDGET (suspend_radio), _("Suspend your computer"), NULL); g_signal_connect (G_OBJECT(suspend_radio), "button_press_event", G_CALLBACK(radio_button_press_event), NULL); gtk_box_pack_start (GTK_BOX (vbox), suspend_radio, FALSE, FALSE, 4); gtk_widget_show (suspend_radio); } /* * Disable Configuration if using accessibility (AddGtkModules) since * using it with accessibility causes a hang. */ if (mdm_config_get_bool (MDM_KEY_CONFIG_AVAILABLE) && !mdm_config_get_bool (MDM_KEY_ADD_GTK_MODULES) && bin_exists (mdm_config_get_string (MDM_KEY_CONFIGURATOR))) { if (group_radio != NULL) radio_group = gtk_radio_button_get_group (GTK_RADIO_BUTTON (group_radio)); config_radio = gtk_radio_button_new_with_mnemonic (radio_group, _("Confi_gure the login manager")); group_radio = config_radio; gtk_tooltips_set_tip (tooltips, GTK_WIDGET (config_radio), _("Configure MDM (this login manager). " "This will require the root password."), NULL); g_signal_connect (G_OBJECT(config_radio), "button_press_event", G_CALLBACK(radio_button_press_event), NULL); gtk_box_pack_start (GTK_BOX (vbox), config_radio, FALSE, FALSE, 4); gtk_widget_show (config_radio); } gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_OK, GTK_RESPONSE_OK); gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); gtk_widget_show_all (dialog); mdm_wm_center_window (GTK_WINDOW (dialog)); mdm_wm_no_login_focus_push (); ret = gtk_dialog_run (GTK_DIALOG (dialog)); mdm_wm_no_login_focus_pop (); if (ret != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return; } if (halt_radio != NULL && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (halt_radio))) greeter_halt_handler (); else if (restart_radio != NULL && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (restart_radio))) greeter_restart_handler (); else if (suspend_radio != NULL && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (suspend_radio))) greeter_suspend_handler (); else if (config_radio != NULL && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (config_radio))) greeter_config_handler (); gtk_widget_destroy (dialog); }
void greeter_system_append_system_menu (GtkWidget *menu) { GtkWidget *w, *sep; gint i = 0; /* should never be allowed by the UI */ if ( ! mdm_config_get_bool (MDM_KEY_SYSTEM_MENU) || ve_string_empty (g_getenv ("MDM_IS_LOCAL"))) return; /* * Disable Configuration if using accessibility (AddGtkModules) since * using it with accessibility causes a hang. */ if (mdm_config_get_bool (MDM_KEY_CONFIG_AVAILABLE) && !mdm_config_get_bool (MDM_KEY_ADD_GTK_MODULES) && bin_exists (mdm_config_get_string (MDM_KEY_CONFIGURATOR))) { w = gtk_image_menu_item_new_with_mnemonic (_("Confi_gure Login Manager...")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("mdmsetup", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (greeter_config_handler), NULL); } if (MdmRebootFound || MdmHaltFound || MdmSuspendFound) { sep = gtk_separator_menu_item_new (); gtk_menu_shell_append (GTK_MENU_SHELL (menu), sep); gtk_widget_show (sep); } if (MdmRebootFound && mdm_common_is_action_available ("REBOOT")) { w = gtk_image_menu_item_new_with_mnemonic (_("_Restart")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("system-restart", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (query_greeter_restart_handler), NULL); } if (MdmHaltFound && mdm_common_is_action_available ("HALT")) { w = gtk_image_menu_item_new_with_mnemonic (_("Shut _Down")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("system-shut-down", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (query_greeter_halt_handler), NULL); } if (MdmSuspendFound && mdm_common_is_action_available ("SUSPEND")) { w = gtk_image_menu_item_new_with_mnemonic (_("Sus_pend")); gtk_image_menu_item_set_image (GTK_IMAGE_MENU_ITEM (w), gtk_image_new_from_icon_name ("system-suspend", GTK_ICON_SIZE_MENU)); gtk_menu_shell_append (GTK_MENU_SHELL (menu), w); gtk_widget_show (GTK_WIDGET (w)); g_signal_connect (G_OBJECT (w), "activate", G_CALLBACK (query_greeter_suspend_handler), NULL); } }
gboolean greeter_item_is_visible (GreeterItemInfo *info) { static gboolean checked = FALSE; static gboolean MDM_IS_LOCAL = FALSE; static gboolean MDM_FLEXI_SERVER = FALSE; gboolean sysmenu = FALSE; gint i = 0; if ( ! checked) { if (g_getenv ("MDM_IS_LOCAL") != NULL) MDM_IS_LOCAL = TRUE; if (g_getenv ("MDM_FLEXI_SERVER") != NULL) MDM_FLEXI_SERVER = TRUE; } if (MDM_IS_LOCAL && ! MDM_FLEXI_SERVER && ! (info->show_modes & GREETER_ITEM_SHOW_CONSOLE_FIXED)) return FALSE; if (MDM_IS_LOCAL && MDM_FLEXI_SERVER && ! (info->show_modes & GREETER_ITEM_SHOW_CONSOLE_FLEXI)) return FALSE; if ( ! MDM_IS_LOCAL && MDM_FLEXI_SERVER && ! (info->show_modes & GREETER_ITEM_SHOW_REMOTE_FLEXI)) return FALSE; if ( ! MDM_IS_LOCAL && ! MDM_FLEXI_SERVER && ! (info->show_modes & GREETER_ITEM_SHOW_REMOTE)) return FALSE; if ((mdm_wm_screen.width < info->minimum_required_screen_width) || (mdm_wm_screen.height < info->minimum_required_screen_height)) return FALSE; sysmenu = mdm_config_get_bool (MDM_KEY_SYSTEM_MENU); /* * Disable Configuration if using accessibility (AddGtkModules) since * using it with accessibility causes a hang. */ if (( ! mdm_config_get_bool (MDM_KEY_CONFIG_AVAILABLE) || mdm_config_get_bool (MDM_KEY_ADD_GTK_MODULES) || ! sysmenu || ! MdmConfiguratorFound) && (info->show_type != NULL && strcmp (info->show_type, "config") == 0)) return FALSE; if (( ! mdm_config_get_bool (MDM_KEY_CHOOSER_BUTTON) || ! sysmenu) && (info->show_type != NULL && strcmp (info->show_type, "chooser") == 0)) return FALSE; if ( ! sysmenu && info->show_type != NULL && strcmp (info->show_type, "system") == 0) return FALSE; if (( ! sysmenu || ! MdmHaltFound) && (info->show_type != NULL && strcmp (info->show_type, "halt") == 0)) return FALSE; if (( ! sysmenu || ! MdmRebootFound) && (info->show_type != NULL && strcmp (info->show_type, "reboot") == 0)) return FALSE; if (( ! sysmenu || ! MdmSuspendFound) && (info->show_type != NULL && strcmp (info->show_type, "suspend") == 0)) return FALSE; if (info->show_type != NULL && sscanf (info->show_type, "custom_cmd%d", &i) == 1 && i >= 0 && i < MDM_CUSTOM_COMMAND_MAX && (! sysmenu || ! MdmCustomCmdsFound[i])) { return FALSE; } if (( ! mdm_config_get_bool (MDM_KEY_TIMED_LOGIN_ENABLE) || ve_string_empty (mdm_config_get_string (MDM_KEY_TIMED_LOGIN)) || NULL == g_getenv("MDM_TIMED_LOGIN_OK")) && (info->show_type != NULL && strcmp (info->show_type, "timed") == 0)) return FALSE; return TRUE; }
/* Callback function for combo style custom lists */ static void combo_selected (GtkComboBox *combo, GreeterItemInfo *item) { char *id = NULL; char *file; char *active; if (ve_string_empty (item->id)) return; active = gtk_combo_box_get_active_text (combo); if (strcmp (item->id, "session") == 0) { combo_session_selected (active); } else if (strcmp (item->id, "language") == 0) { /* * Since combo boxes can't store the ID value, have to do some * extra work to figure out which row is selected. */ GtkListStore *lang_model = mdm_lang_get_model (); GtkTreeIter iter; char *name, *untranslated, *lang_display_name, *locale_name; gboolean valid; valid = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (lang_model), &iter); while (valid) { gtk_tree_model_get (GTK_TREE_MODEL (lang_model), &iter, TRANSLATED_NAME_COLUMN, &name, UNTRANSLATED_NAME_COLUMN, &untranslated, LOCALE_COLUMN, &locale_name, -1); if (untranslated) lang_display_name = g_strdup_printf ("%s (%s)", name, untranslated); else lang_display_name = g_strdup (name); if (strcmp (lang_display_name, active) == 0) { mdm_lang_set_restart_dialog (locale_name); break; } g_free (lang_display_name); valid = gtk_tree_model_iter_next (GTK_TREE_MODEL (lang_model), &iter); } } else { if (DOING_MDM_DEVELOPMENT) return; id = gtk_combo_box_get_active_text (combo); file = g_strdup_printf ("%s/%s.GreeterInfo", ve_sure_string (mdm_config_get_string (MDM_KEY_SERV_AUTHDIR)), ve_sure_string (g_getenv ("DISPLAY"))); mdm_save_customlist_data (file, item->id, id); } }