예제 #1
0
static void
user_toggled_cb (GtkCellRendererToggle *renderer,
		 gchar                 *path,
		 gpointer               user_data)
{
	GstSharesTool *tool;
	GtkWidget *table;
	GtkTreeModel *model;
	GtkTreeIter iter;
	OobsUser *user;
	gboolean active;

	tool = GST_SHARES_TOOL (user_data);
	table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table");
	model = gtk_tree_view_get_model (GTK_TREE_VIEW (table));

	if (! gtk_tree_model_get_iter_from_string (model, &iter, path))
		return;

	gtk_tree_model_get (model, &iter,
			    COL_ACTIVE, &active,
			    COL_USER, &user,
			    -1);

	/* we want to invert the state */
	active ^= 1;

	if (!active) {
		oobs_smb_config_delete_user_password (OOBS_SMB_CONFIG (tool->smb_config), user);
	} else {
		GtkWidget *dialog;
		gint response;

		dialog = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "smb_password_dialog");
		gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (GST_TOOL (tool)->main_dialog));
		response = gtk_dialog_run (GTK_DIALOG (dialog));
		gtk_widget_hide (dialog);

		if (response == GTK_RESPONSE_OK) {
			GtkWidget *entry;
			const gchar *password;

			entry = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "smb_password_entry");
			password = gtk_entry_get_text (GTK_ENTRY (entry));

			oobs_smb_config_set_user_password (OOBS_SMB_CONFIG (tool->smb_config), user, password);
		}
	}

	active = oobs_smb_config_user_has_password (OOBS_SMB_CONFIG (tool->smb_config), user);
	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
			    COL_ACTIVE, active,
			    -1);
	g_object_unref (user);

	gst_tool_commit_async (GST_TOOL (tool), tool->smb_config, NULL, NULL, NULL);
}
예제 #2
0
gboolean
on_hostname_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
  GstNetworkTool *tool;
  gboolean changed;
  const gchar *hostname;

  tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data)));
  changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed"));
  hostname = gtk_entry_get_text (GTK_ENTRY (widget));

  if (changed && hostname && *hostname)
    {
      GtkWidget *dialog;
      gint res;

      dialog = gtk_message_dialog_new (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
				       GTK_DIALOG_MODAL,
				       GTK_MESSAGE_WARNING,
				       GTK_BUTTONS_NONE,
				       _("The host name has changed"),
				       NULL);
      gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog),
						_("This will prevent you "
						  "from launching new applications, and so you will "
						  "have to log in again. Continue anyway?"),
						NULL);
      gtk_dialog_add_buttons (GTK_DIALOG (dialog),
			      GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
			      _("Change _Host name"), GTK_RESPONSE_ACCEPT,
			      NULL);

      res = gtk_dialog_run (GTK_DIALOG (dialog));
      gtk_widget_destroy (dialog);

      if (res == GTK_RESPONSE_ACCEPT)
	{
	  oobs_hosts_config_set_hostname (tool->hosts_config, hostname);
	  gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config));
	}
      else
	{
	  gtk_entry_set_text (GTK_ENTRY (widget),
			      oobs_hosts_config_get_hostname (tool->hosts_config));
	}
    }

  g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE));

  return FALSE;
}
예제 #3
0
void
host_aliases_run_dialog (GstNetworkTool *network_tool,
			 GtkTreeIter    *iter)
{
  GstTool *tool;
  GtkWidget *dialog;
  GtkTreeView *list;
  GtkTreeModel *model;
  gint response;
  OobsStaticHost *host = NULL;

  if (iter)
    {
      list = network_tool->host_aliases_list;
      model = gtk_tree_view_get_model (list);

      gtk_tree_model_get (model, iter,
			  COL_HOST_OBJECT, &host,
			  -1);
    }

  tool = GST_TOOL (network_tool);
  dialog = network_tool->host_aliases_dialog;
  host_aliases_dialog_prepare (host);

  gst_dialog_add_edit_dialog (tool->main_dialog, dialog);

  gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (GST_TOOL (tool)->main_dialog));
  response = gtk_dialog_run (GTK_DIALOG (dialog));
  gtk_widget_hide (dialog);

  gst_dialog_remove_edit_dialog (tool->main_dialog, dialog);

  if (response == GTK_RESPONSE_OK)
    host_aliases_dialog_save (iter);

  if (host)
    g_object_unref (host);
}
예제 #4
0
ETzMap *
e_tz_map_new (GstTool *tool)
{
	ETzMap *tzmap;
	GPtrArray *locs;
	TzLocation *tzl;
	GtkWidget *location_combo;
	int i;

	tzmap = g_new0 (ETzMap, 1);
	tzmap->tool = GST_TOOL (tool);
	tzmap->tzdb = tz_load_db ();
	if (!tzmap->tzdb)
		g_error ("Unable to load system timezone database.");
	
	tzmap->map = e_map_new ();
	if (!tzmap->map)
		g_error ("Unable to create map widget.");

	gtk_widget_set_events (GTK_WIDGET (tzmap->map), gtk_widget_get_events (GTK_WIDGET (tzmap->map)) | 
	      GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK);
	
	locs = tz_get_locations (tzmap->tzdb);

	for (i = 0; i < locs->len; i++)
	{
		tzl = g_ptr_array_index (locs, i);
		e_map_add_point (tzmap->map, NULL, tzl->longitude, tzl->latitude,
				 TZ_MAP_POINT_NORMAL_RGBA);
	}

	g_signal_connect (G_OBJECT (tzmap->map), "map-event",
			  G_CALLBACK (map), tzmap);
	g_signal_connect (G_OBJECT (tzmap->map), "unmap-event",
			  G_CALLBACK (unmap), tzmap);
        g_signal_connect(G_OBJECT (tzmap->map), "motion-notify-event",
			 G_CALLBACK (motion), (gpointer) tzmap);
	g_signal_connect(G_OBJECT(tzmap->map), "button-press-event",
			 G_CALLBACK (button_pressed), (gpointer) tzmap);
        g_signal_connect(G_OBJECT (tzmap->map), "enter-notify-event",
	                 G_CALLBACK (in_map), (gpointer) tzmap);
        g_signal_connect(G_OBJECT (tzmap->map), "leave-notify-event",
	                 G_CALLBACK (out_map), (gpointer) tzmap);
	
	location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo");
	g_signal_connect (G_OBJECT (location_combo), "changed",
	                 G_CALLBACK (update_map), (gpointer) tzmap);
	
	return tzmap;
}
예제 #5
0
int
main (int argc, char *argv[])
{
	gst_init_tool ("users-admin", argc, argv, NULL);
	tool = GST_TOOL (gst_users_tool_new ());

	gst_dialog_connect_signals (tool->main_dialog, signals);
	main_window_prepare (GST_USERS_TOOL (tool));

	gtk_widget_show (GTK_WIDGET (tool->main_dialog));
	gtk_main ();
	
	return 0;
}
예제 #6
0
static void
setup_shells_combo (GstUsersTool *tool)
{
	GtkWidget *combo;
	GtkTreeModel *model;

	combo = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_settings_shell");
	model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING));

	gtk_combo_box_set_model (GTK_COMBO_BOX (combo), model);
	g_object_unref (model);

	gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (combo), 0);
}
예제 #7
0
static void
main_window_prepare (GstUsersTool *tool)
{
	GtkWidget *uid_entry;
	GtkWidget *passwd_label;
	int width;

	uid_entry = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_settings_uid");
	gtk_spin_button_set_range (GTK_SPIN_BUTTON (uid_entry), 0, OOBS_MAX_UID);

	create_tables (tool);

	gtk_window_set_default_size (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
	                             650, 400);

	/* Ensure dialog won't change size when selecting another user */
	passwd_label = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog,
	                                        "user_settings_passwd");
	width = MAX (strlen (_("Not asked on login")), strlen (_("Asked on login")));
	gtk_label_set_width_chars (GTK_LABEL (passwd_label), width);

	/* For random password generation. */
	srand (time (NULL));
}
예제 #8
0
int 
main (int argc, char *argv[])
{
	gst_init_tool ("services-admin", argc, argv, NULL);
	tool = gst_services_tool_new ();

	gst_dialog_connect_signals (tool->main_dialog, signals);
	table_create ();
	service_settings_table_create ();

	gtk_window_set_default_size (GTK_WINDOW (GST_TOOL (tool)->main_dialog),
	                             400, 550);

	gtk_widget_show (GTK_WIDGET (tool->main_dialog));
	gtk_main ();

	return 0;
}
예제 #9
0
/* callbacks */
void
on_service_toggled (GtkCellRenderer *renderer, gchar *path_str, gpointer data)
{
	GtkTreeView *treeview = GTK_TREE_VIEW (gst_dialog_get_widget (tool->main_dialog, "services_list"));
	GtkTreeModel *model = gtk_tree_view_get_model (treeview);
	GtkTreePath *path;
	GstTool *tool = GST_TOOL (data);
	GtkTreeIter iter;
	OobsService *service;
	gboolean value, new_value, dangerous;

	path = gtk_tree_path_new_from_string (path_str);
	value = gtk_cell_renderer_toggle_get_active (GTK_CELL_RENDERER_TOGGLE (renderer));
	new_value = !value;

	if (!gtk_tree_model_get_iter (model, &iter, path))
		return;

	gtk_tree_model_get (model,
			    &iter,
			    COL_OBJECT, &service,
			    COL_DANGEROUS, &dangerous,
			    -1);

	if (new_value || !dangerous || show_warning_dialog (tool, service)) {
		OobsServicesRunlevel *rl;
		
		rl = GST_SERVICES_TOOL (tool)->default_runlevel;
		oobs_service_set_runlevel_configuration (service, rl,
							 (new_value) ? OOBS_SERVICE_START : OOBS_SERVICE_IGNORE,
							 /* FIXME: hardcoded value... */
							 50);
		oobs_object_commit (GST_SERVICES_TOOL (tool)->services_config);

		gtk_list_store_set (GTK_LIST_STORE (model),
				    &iter,
				    COL_ACTIVE, new_value,
				    -1);
	}

	gtk_tree_path_free (path);
}
예제 #10
0
gboolean
on_domain_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data)
{
  GstNetworkTool *tool;
  gboolean changed;
  const gchar *domain;

  tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data)));
  changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed"));
  domain = gtk_entry_get_text (GTK_ENTRY (widget));

  if (changed)
    {
      oobs_hosts_config_set_domainname (tool->hosts_config, domain);
      gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config));
    }

  g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE));

  return FALSE;
}
예제 #11
0
void
users_table_set_config (GstSharesTool *tool)
{
	GtkWidget *table;
	GtkListStore *store;
	GtkTreeIter iter;
	OobsList *users;
	OobsListIter list_iter;
	gboolean valid;

	table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table");
	store = gtk_list_store_new (LAST_COL, G_TYPE_BOOLEAN, G_TYPE_STRING, OOBS_TYPE_USER);

	users = oobs_users_config_get_users (OOBS_USERS_CONFIG (tool->users_config));
	valid = oobs_list_get_iter_first (users, &list_iter);

	while (valid) {
		GObject *user;
		gboolean active;

		user = oobs_list_get (users, &list_iter);
		active = oobs_smb_config_user_has_password (OOBS_SMB_CONFIG (tool->smb_config),
							    OOBS_USER (user));

		gtk_list_store_append (store, &iter);
		gtk_list_store_set (store, &iter,
				    COL_USER, user,
				    COL_NAME, oobs_user_get_full_name (OOBS_USER (user)),
				    COL_ACTIVE, active,
				    -1);

		g_object_unref (user);
		valid = oobs_list_iter_next (users, &list_iter);
	}

	gtk_tree_view_set_model (GTK_TREE_VIEW (table), GTK_TREE_MODEL (store));
	g_object_unref (store);
}
예제 #12
0
void
table_populate_profiles (GstUsersTool *tool,
                         GList *profiles)
{
	GstUserProfile *profile;
	GtkWidget *table;
	GtkWidget *radio;
	GtkWidget *label;
	GHashTable *radios;
	GHashTable *labels;
	GHashTableIter iter;
	gpointer value;
	GList *l;
	static int ncols, nrows; /* original size of the table */
	PangoAttribute *attribute;
	PangoAttrList *attributes;
	int i;

	table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_table");
	radios = g_object_get_data (G_OBJECT (table), "radio_buttons");
	labels = g_object_get_data (G_OBJECT (table), "labels");

	/* create the hash table to hold references to radio buttons and their labels */
	if (radios == NULL) {
		/* keys are names owned by GstUserProfiles, values are pointers:
		 * no need to free anything */
		radios = g_hash_table_new (g_str_hash, g_str_equal);
		labels = g_hash_table_new (g_str_hash, g_str_equal);
		g_object_set_data (G_OBJECT (table), "radio_buttons", radios);
		g_object_set_data (G_OBJECT (table), "labels", labels);
		g_object_get (G_OBJECT (table), "n-rows", &nrows, "n-columns", &ncols, NULL);
	}
	else {
		/* free the radio buttons and labels if they were already here */
		g_hash_table_iter_init (&iter, radios);
		while (g_hash_table_iter_next (&iter, NULL, &value)) {
			gtk_widget_destroy (GTK_WIDGET (value));
		}

		g_hash_table_iter_init (&iter, labels);
		while (g_hash_table_iter_next (&iter, NULL, &value)) {
			gtk_widget_destroy (GTK_WIDGET (value));
		}

		g_hash_table_remove_all (radios);
		g_hash_table_remove_all (labels);
	}

	/* increase table's size based on it's "empty" size
	 * we leave an empty line after a radio and its decription label */
	gtk_table_resize (GTK_TABLE (table), g_list_length (profiles) * 3 + nrows, ncols);

	radio = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_custom");
	label = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_custom_label");

	attributes = pango_attr_list_new ();
	attribute = pango_attr_size_new (9 * PANGO_SCALE);
	pango_attr_list_insert (attributes, attribute);
	attribute = pango_attr_style_new (PANGO_STYLE_ITALIC);
	pango_attr_list_insert (attributes, attribute);
	gtk_label_set_attributes (GTK_LABEL (label), attributes);

	i = 1; /* empty line after "Custom" radio and label */
	for (l = profiles; l; l = l->next) {
		profile = (GstUserProfile *) l->data;
		radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio),
		                                                     profile->name);
		label = gtk_label_new (profile->description);
		gtk_label_set_line_wrap (GTK_LABEL (label), TRUE);
		gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5);
		gtk_misc_set_padding (GTK_MISC (label), 16, 0);
		gtk_label_set_attributes (GTK_LABEL (label), attributes);

		gtk_table_attach_defaults (GTK_TABLE (table),
		                           radio, 0, ncols,
		                           nrows + i, nrows + i + 1);
		gtk_table_attach_defaults (GTK_TABLE (table),
		                           label, 1, ncols,
		                           nrows + i + 1, nrows + i + 2);
		gtk_widget_show (radio);
		gtk_widget_show (label);

		g_hash_table_replace (radios, profile->name, radio);
		g_hash_table_replace (labels, profile->name, label);
		i += 3;
	}
}