Index: src/ui/dialog/filter-effects-dialog.h
===================================================================
--- src/ui/dialog/filter-effects-dialog.h	(revis��o 17204)
+++ src/ui/dialog/filter-effects-dialog.h	(c��pia de trabalho)
@@ -21,6 +21,7 @@
 #include <gtkmm/frame.h>
 #include <gtkmm/liststore.h>
 #include <gtkmm/menu.h>
+#include <gtkmm/notebook.h>
 #include <gtkmm/sizegroup.h>
 #include <gtkmm/treeview.h>
 
@@ -211,8 +212,10 @@
 
     void set_attr_direct(const AttrWidget*);
     void set_child_attr_direct(const AttrWidget*);
+    void set_filternode_attr(const AttrWidget*);
     void set_attr(SPObject*, const SPAttributeEnum, const gchar* val);
     void update_settings_view();
+    void update_filter_general_settings_view();
     void update_settings_sensitivity();
     void update_color_matrix();
     void update_primitive_infobox();
@@ -231,14 +234,18 @@
     Gtk::Button _add_primitive;
 
     // Bottom pane (filter effect primitive settings)
-    Gtk::VBox _settings_box;
+    Gtk::Notebook _settings_tabs;
+    Gtk::VBox _settings_tab2;
+    Gtk::VBox _settings_tab1;
     Gtk::Label _empty_settings;
+    Gtk::Label _no_filter_selected;
 
     class Settings;
     class MatrixAttr;
     class ColorMatrixValues;
     class LightSourceControl;
     Settings* _settings;
+    Settings* _filter_general_settings;
     Glib::RefPtr<Gtk::SizeGroup> _sizegroup;
 
     // Color Matrix
Index: src/ui/dialog/filter-effects-dialog.cpp
===================================================================
--- src/ui/dialog/filter-effects-dialog.cpp	(revis��o 17204)
+++ src/ui/dialog/filter-effects-dialog.cpp	(c��pia de trabalho)
@@ -682,8 +682,9 @@
 
         for(int i = 0; i < _max_types; ++i) {
             _groups[i] = new Gtk::VBox;
-            b.add(*_groups[i]);
+            b.pack_start(*_groups[i], false, false);
         }
+        _current_type = 0;
     }
 
     ~Settings()
@@ -724,7 +725,7 @@
 
     void add_notimplemented()
     {
-        Gtk::Label* lbl = Gtk::manage(new Gtk::Label("This SVG filter effect is not yet implemented in Inkscape."));
+        Gtk::Label* lbl = Gtk::manage(new Gtk::Label(_("This SVG filter effect is not yet implemented in Inkscape.")));
 
         add_widget(lbl, "");
     }
@@ -1217,6 +1218,8 @@
     }
 
     update_selection(desktop->selection);
+    g_warning("void FilterEffectsDialog::FilterModifier::update_filters()");
+    _dialog.update_filter_general_settings_view();
 }
 
 SPFilter* FilterEffectsDialog::FilterModifier::get_selected_filter()
@@ -1421,7 +1424,7 @@
 
     if(f) {
         _dialog._primitive_box.set_sensitive(true);
-
+        _dialog.update_filter_general_settings_view();
         for(SPObject *prim_obj = f->children;
                 prim_obj && SP_IS_FILTER_PRIMITIVE(prim_obj);
                 prim_obj = prim_obj->next) {
@@ -2009,11 +2012,14 @@
       _add_primitive_type(FPConverter),
       _add_primitive(_("Add Effect:")),
       _empty_settings(_("No effect selected"), Gtk::ALIGN_LEFT),
+      _no_filter_selected(_("No filter selected"), Gtk::ALIGN_LEFT),
       _locked(false),
       _attr_lock(false)
 {
-    _settings = new Settings(*this, _settings_box, sigc::mem_fun(*this, &FilterEffectsDialog::set_attr_direct),
+    _settings = new Settings(*this, _settings_tab1, sigc::mem_fun(*this, &FilterEffectsDialog::set_attr_direct),
                              NR_FILTER_ENDPRIMITIVETYPE);
+    _filter_general_settings = new Settings(*this, _settings_tab2, sigc::mem_fun(*this, &FilterEffectsDialog::set_filternode_attr),
+                             1);
     _sizegroup = Gtk::SizeGroup::create(Gtk::SIZE_GROUP_HORIZONTAL);
     _sizegroup->set_ignore_hidden();
 
@@ -2025,8 +2031,9 @@
     Gtk::ScrolledWindow* sw_prims = Gtk::manage(new Gtk::ScrolledWindow);
     Gtk::HBox* infobox = Gtk::manage(new Gtk::HBox);
     Gtk::HBox* hb_prims = Gtk::manage(new Gtk::HBox);
-    Gtk::Frame* fr_settings = Gtk::manage(new Gtk::Frame(_("<b>Effect parameters</b>")));
-    Gtk::Alignment* al_settings = Gtk::manage(new Gtk::Alignment);
+//    Gtk::Frame* fr_settings = Gtk::manage(new Gtk::Frame(_("<b>Effect parameters</b>")));
+//    Gtk::Alignment* al_settings = Gtk::manage(new Gtk::Alignment);
+
     _getContents()->add(*hpaned);
     hpaned->pack1(_filter_modifier);
     hpaned->pack2(_primitive_box);
@@ -2035,15 +2042,18 @@
     _primitive_box.pack_start(*hb_prims, false, false);
     sw_prims->add(_primitive_list);
     infobox->pack_start(_infobox_icon, false, false);
-    infobox->pack_end(_infobox_desc, false, false);
+    infobox->pack_start(_infobox_desc, false, false);
     _infobox_desc.set_line_wrap(true);
     
     hb_prims->pack_end(_add_primitive_type, false, false);
     hb_prims->pack_end(_add_primitive, false, false);
-    _getContents()->pack_start(*fr_settings, false, false);
-    fr_settings->add(*al_settings);
-    al_settings->add(_settings_box);
-    
+    _getContents()->pack_start(_settings_tabs, false, false);
+//    _getContents()->pack_start(*fr_settings, false, false);
+//    fr_settings->add(*al_settings);
+//    al_settings->add(_settings_tabs);
+    _settings_tabs.append_page(_settings_tab1, _("Effect parameters"));
+    _settings_tabs.append_page(_settings_tab2, _("Filter General Settings"));
+        
     _primitive_list.signal_primitive_changed().connect(
         sigc::mem_fun(*this, &FilterEffectsDialog::update_settings_view));
     _filter_modifier.signal_filter_changed().connect(
@@ -2054,9 +2064,9 @@
           
     sw_prims->set_policy(Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
     sw_prims->set_shadow_type(Gtk::SHADOW_IN);
-    al_settings->set_padding(0, 0, 12, 0);
-    fr_settings->set_shadow_type(Gtk::SHADOW_NONE);
-    ((Gtk::Label*)fr_settings->get_label_widget())->set_use_markup();
+//    al_settings->set_padding(0, 0, 12, 0);
+//    fr_settings->set_shadow_type(Gtk::SHADOW_NONE);
+//    ((Gtk::Label*)fr_settings->get_label_widget())->set_use_markup();
     _add_primitive.signal_clicked().connect(sigc::mem_fun(*this, &FilterEffectsDialog::add_primitive));
     _primitive_list.set_menu(create_popup_menu(*this, sigc::mem_fun(*this, &FilterEffectsDialog::duplicate_primitive),
                                                sigc::mem_fun(_primitive_list, &PrimitiveList::remove_selected)));
@@ -2090,8 +2100,15 @@
     //       most of the current values are complete guesses!
 
     _empty_settings.set_sensitive(false);
-    _settings_box.pack_start(_empty_settings);
+    _settings_tab1.pack_start(_empty_settings);
+    
+    _no_filter_selected.set_sensitive(false);
+    _settings_tab2.pack_start(_no_filter_selected);
 
+    _filter_general_settings->type(0);
+    _filter_general_settings->add_multispinbutton(SP_ATTR_X, SP_ATTR_Y, _("Coordinates"), -10000, 10000, 1, 1, 0);
+    _filter_general_settings->add_multispinbutton(SP_ATTR_WIDTH, SP_ATTR_HEIGHT, _("Dimensions"), 0, 10000, 1, 1, 0);
+
     _settings->type(NR_FILTER_BLEND);
     _settings->add_combo(SP_ATTR_MODE, _("Mode"), BlendModeConverter);
 
@@ -2151,8 +2168,6 @@
 
     _settings->type(NR_FILTER_IMAGE);
     _settings->add_fileorelement(SP_ATTR_XLINK_HREF, _("Source of Image"));
-    _settings->add_multispinbutton(SP_ATTR_X, SP_ATTR_Y, _("Coordinates"), -10000, 10000, 1, 1, 0);
-    _settings->add_multispinbutton(SP_ATTR_WIDTH, SP_ATTR_HEIGHT, _("Dimensions"), 0, 10000, 1, 1, 0);
     
     _settings->type(NR_FILTER_OFFSET);
     _settings->add_spinslider(SP_ATTR_DX, _("Delta X"), -100, 100, 1, 0.01, 1);
@@ -2288,6 +2303,20 @@
     set_attr(_primitive_list.get_selected(), input->get_attribute(), input->get_as_attribute().c_str());
 }
 
+void FilterEffectsDialog::set_filternode_attr(const AttrWidget* input)
+{
+    if(!_locked) {
+        _attr_lock = true;
+        SPFilter *filter = _filter_modifier.get_selected_filter();
+        const gchar* name = (const gchar*)sp_attribute_name(input->get_attribute());
+        if (filter && name && SP_OBJECT_REPR(filter)){
+            SP_OBJECT_REPR(filter)->setAttribute(name, input->get_as_attribute().c_str());
+            filter->requestModified(SP_OBJECT_MODIFIED_FLAG);
+        }
+        _attr_lock = false;
+    }
+}
+
 void FilterEffectsDialog::set_child_attr_direct(const AttrWidget* input)
 {
     set_attr(_primitive_list.get_selected()->children, input->get_attribute(), input->get_as_attribute().c_str());
@@ -2297,6 +2326,7 @@
 {
     if(!_locked) {
         _attr_lock = true;
+        int cur = _settings_tabs.get_current_page();
 
         SPFilter *filter = _filter_modifier.get_selected_filter();
         const gchar* name = (const gchar*)sp_attribute_name(attr);
@@ -2312,12 +2342,40 @@
                                    _("Set filter primitive attribute"));
         }
 
+        _settings_tabs.set_current_page(cur);
         _attr_lock = false;
     }
 }
 
+void FilterEffectsDialog::update_filter_general_settings_view()
+{
+g_warning("update_filter_general_settings_view");
+    if(!_locked) {
+        _attr_lock = true;
+        int cur = _settings_tabs.get_current_page();
+
+        SPFilter* filter = _filter_modifier.get_selected_filter();
+
+        if(filter) {
+            g_warning("we have a filter");
+            _filter_general_settings->show_and_update(0, filter); //?!?!
+            _no_filter_selected.hide();
+        }
+        else {
+            g_warning("no filter here :-(...");
+            _settings_tab2.hide_all();
+            _settings_tab2.show();
+            _no_filter_selected.show();
+        }
+
+        _settings_tabs.set_current_page(cur);
+        _attr_lock = false;
+    }
+}
+
 void FilterEffectsDialog::update_settings_view()
 {
+    g_warning("update_settings_view");
     update_settings_sensitivity();
 
     if(_attr_lock)
@@ -2326,12 +2384,14 @@
     SPFilterPrimitive* prim = _primitive_list.get_selected();
 
     if(prim) {
+        g_warning("we have a prim");
         _settings->show_and_update(FPConverter.get_id_from_key(prim->repr->name()), prim);
         _empty_settings.hide();
     }
     else {
-        _settings_box.hide_all();
-        _settings_box.show();
+        g_warning("no prim here... :-P");
+        _settings_tab1.hide_all();
+        _settings_tab1.show();
         _empty_settings.show();
     }
 }
