Updated version.
diff --git a/data/Makefile.am b/data/Makefile.am
index 1837a4f..185cc90 100644
--- a/data/Makefile.am
+++ b/data/Makefile.am
@@ -19,7 +19,8 @@ uidir=$(datadir)/lxpanel/ui
 ui_in_files= \
 	ui/panel-pref.glade \
 	ui/launchtaskbar.glade \
-	ui/netstatus.glade
+	ui/netstatus.glade \
+	ui/netstatus3.glade
 
 ui_DATA = $(ui_in_files:.glade=.ui)
 
diff --git a/data/ui/netstatus3.glade b/data/ui/netstatus3.glade
new file mode 100644
index 0000000..359fb33
--- /dev/null
+++ b/data/ui/netstatus3.glade
@@ -0,0 +1,915 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Generated with glade 3.18.3 -->
+<interface>
+  <requires lib="gtk+" version="3.0"/>
+  <object class="GtkDialog" id="network_status_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="resizable">False</property>
+    <property name="window_position">center</property>
+    <property name="default_width">300</property>
+    <property name="type_hint">dialog</property>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="dialog-vbox2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="dialog-action_area2">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" id="helpbutton1">
+                <property name="label">gtk-help</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="configure_button">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
+                <child>
+                  <object class="GtkAlignment" id="alignment2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="xscale">0</property>
+                    <property name="yscale">0</property>
+                    <child>
+                      <object class="GtkBox" id="hbox5">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">2</property>
+                        <child>
+                          <object class="GtkImage" id="image2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="stock">gtk-preferences</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkLabel" id="label42">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Con_figure</property>
+                            <property name="use_underline">True</property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" id="close_button">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="can_default">True</property>
+                <property name="has_default">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkNotebook" id="notebook1">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="border_width">5</property>
+            <child>
+              <object class="GtkBox" id="vbox1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">18</property>
+                <child>
+                  <object class="GtkBox" id="connection_frame">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label3">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Connection&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox6">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label43">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="connection_hbox">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">12</property>
+                            <child>
+                              <object class="GtkGrid" id="connection_table">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="row_spacing">6</property>
+                                <property name="column_spacing">12</property>
+                                <child>
+                                  <object class="GtkLabel" id="label5">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">Status:</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="status_label">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">True</property>
+                                    <property name="xalign">0</property>
+                                    <property name="selectable">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">1</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkComboBox" id="name_combo">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="has_entry">True</property>
+                                    <child internal-child="entry">
+                                      <object class="GtkEntry" id="combobox-entry">
+                                        <property name="can_focus">False</property>
+                                      </object>
+                                    </child>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">1</property>
+                                    <property name="top_attach">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <object class="GtkLabel" id="label16">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="xalign">0</property>
+                                    <property name="label" translatable="yes">_Name:</property>
+                                    <property name="use_underline">True</property>
+                                  </object>
+                                  <packing>
+                                    <property name="left_attach">0</property>
+                                    <property name="top_attach">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="activity_frame">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label4">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Activity&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox8">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label44">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkGrid" id="table2">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="row_spacing">6</property>
+                            <property name="column_spacing">12</property>
+                            <child>
+                              <object class="GtkLabel" id="received_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="sent_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label11">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Received:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label12">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Sent:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="signal_strength_frame">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label48">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Signal Strength&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox14">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label49">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkBox" id="hbox15">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">6</property>
+                            <child>
+                              <object class="GtkProgressBar" id="signal_strength_bar">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="pulse_step">0.10000000149</property>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="signal_strength_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" translatable="yes">0%</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label1">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">General</property>
+              </object>
+              <packing>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkBox" id="vbox2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">12</property>
+                <property name="orientation">vertical</property>
+                <property name="spacing">18</property>
+                <child>
+                  <object class="GtkBox" id="inet4_frame">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label25">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Internet Protocol (IPv4)&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox11">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label45">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkGrid" id="inet4_table">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="row_spacing">6</property>
+                            <property name="column_spacing">12</property>
+                            <child>
+                              <object class="GtkLabel" id="inet4_addr_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Address:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_addr_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_bcast_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_mask_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_dest_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_dest_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Destination:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_bcast_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Broadcast:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet4_mask_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Subnet Mask:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="inet6_frame">
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="label26">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Internet Protocol (IPv6)&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox12">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label46">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkGrid" id="table5">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="row_spacing">6</property>
+                            <property name="column_spacing">12</property>
+                            <child>
+                              <object class="GtkLabel" id="label39">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Address:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet6_addr_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="label40">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Scope:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="inet6_scope_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+                <child>
+                  <object class="GtkBox" id="dev_frame">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">6</property>
+                    <child>
+                      <object class="GtkLabel" id="dev_label">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="xalign">0</property>
+                        <property name="label" translatable="yes">&lt;b&gt;Network Device&lt;/b&gt;</property>
+                        <property name="use_markup">True</property>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkBox" id="hbox13">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkLabel" id="label47">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label">    </property>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <object class="GtkGrid" id="table6">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="row_spacing">6</property>
+                            <property name="column_spacing">12</property>
+                            <child>
+                              <object class="GtkLabel" id="dev_addr_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Address:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="dev_addr_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">1</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="dev_type_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="xalign">0</property>
+                                <property name="selectable">True</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkLabel" id="dev_type_title">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" translatable="yes">Type:</property>
+                              </object>
+                              <packing>
+                                <property name="left_attach">0</property>
+                                <property name="top_attach">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">True</property>
+                    <property name="position">2</property>
+                  </packing>
+                </child>
+              </object>
+              <packing>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child type="tab">
+              <object class="GtkLabel" id="label2">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Support</property>
+              </object>
+              <packing>
+                <property name="position">1</property>
+                <property name="tab_fill">False</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget response="-11">helpbutton1</action-widget>
+      <action-widget response="0">configure_button</action-widget>
+      <action-widget response="-7">close_button</action-widget>
+    </action-widgets>
+  </object>
+</interface>
diff --git a/plugins/dclock.c b/plugins/dclock.c
index e054a90..c854449 100644
--- a/plugins/dclock.c
+++ b/plugins/dclock.c
@@ -76,8 +76,8 @@ static GtkWidget * dclock_create_calendar(DClockPlugin * dc)
     GtkWidget * win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
     gtk_window_set_default_size(GTK_WINDOW(win), 180, 180);
     gtk_window_set_decorated(GTK_WINDOW(win), FALSE);
-    gtk_window_set_resizable(GTK_WINDOW(win), FALSE);
-    gtk_container_set_border_width(GTK_CONTAINER(win), 5);
+	gtk_window_set_resizable(GTK_WINDOW(win), FALSE);
+	gtk_container_set_border_width(GTK_CONTAINER(win), 5);
     gtk_window_set_skip_taskbar_hint(GTK_WINDOW(win), TRUE);
     gtk_window_set_skip_pager_hint(GTK_WINDOW(win), TRUE);
     gtk_window_set_type_hint(GTK_WINDOW(win), GDK_WINDOW_TYPE_HINT_UTILITY);
diff --git a/plugins/launchtaskbar.c b/plugins/launchtaskbar.c
index fb0dd2a..63a47fb 100644
--- a/plugins/launchtaskbar.c
+++ b/plugins/launchtaskbar.c
@@ -63,6 +63,9 @@
 # include "menu-policy.h"
 #endif
 
+#if GTK_CHECK_VERSION (3,0,0)
+#include <gdk/gdkx.h>
+#endif
 
 #define PANEL_ICON_SIZE 24 /* see the private.h */
 
@@ -1907,6 +1910,76 @@ static void task_delete(LaunchTaskBarPlugin * tb, Task * tk, gboolean unlink, gb
     g_free(tk);
 }
 
+#if GTK_CHECK_VERSION(3,0,0)
+static cairo_surface_t *
+_wnck_cairo_surface_get_from_pixmap (Screen *screen,
+									 Pixmap  xpixmap)
+{
+  cairo_surface_t *surface;
+  Display *display;
+  Window root_return;
+  int x_ret, y_ret;
+  unsigned int w_ret, h_ret, bw_ret, depth_ret;
+  XWindowAttributes attrs;
+
+  surface = NULL;
+  display = DisplayOfScreen (screen);
+
+ // _wnck_error_trap_push (display);
+
+  if (!XGetGeometry (display, xpixmap, &root_return,
+					 &x_ret, &y_ret, &w_ret, &h_ret, &bw_ret, &depth_ret))
+	goto TRAP_POP;
+
+  if (depth_ret == 1)
+	{
+	  surface = cairo_xlib_surface_create_for_bitmap (display,
+													  xpixmap,
+													  screen,
+													  w_ret,
+													  h_ret);
+	}
+  else
+	{
+	  if (!XGetWindowAttributes (display, root_return, &attrs))
+		goto TRAP_POP;
+
+	  surface = cairo_xlib_surface_create (display,
+										   xpixmap,
+										   attrs.visual,
+										   w_ret, h_ret);
+	}
+
+TRAP_POP:
+//  _wnck_error_trap_pop (display);
+
+  return surface;
+}
+
+
+GdkPixbuf*
+_wnck_gdk_pixbuf_get_from_pixmap (Screen *screen,
+								  Pixmap  xpixmap)
+{
+  cairo_surface_t *surface;
+  GdkPixbuf *retval;
+
+  surface = _wnck_cairo_surface_get_from_pixmap (screen, xpixmap);
+
+  if (surface == NULL)
+	return NULL;
+
+  retval = gdk_pixbuf_get_from_surface (surface,
+										0,
+										0,
+										cairo_xlib_surface_get_width (surface),
+										cairo_xlib_surface_get_height (surface));
+  cairo_surface_destroy (surface);
+
+  return retval;
+}
+
+#else
 /* Get a pixbuf from a pixmap.
  * Originally from libwnck, Copyright (C) 2001 Havoc Pennington. */
 static GdkPixbuf * _wnck_gdk_pixbuf_get_from_pixmap(Pixmap xpixmap, int width, int height)
@@ -1966,6 +2039,7 @@ static GdkPixbuf * _wnck_gdk_pixbuf_get_from_pixmap(Pixmap xpixmap, int width, i
         g_object_unref(G_OBJECT(drawable));
     return retval;
 }
+#endif
 
 /* Apply a mask to a pixbuf.
  * Originally from libwnck, Copyright (C) 2001 Havoc Pennington. */
@@ -2205,7 +2279,11 @@ static GdkPixbuf * get_wm_icon(Window task_win, guint required_width, guint requ
         /* If we have an X pixmap and its geometry, convert it to a GDK pixmap. */
         if (result == Success)
         {
+#if GTK_CHECK_VERSION (3, 0, 0)
+			pixmap = _wnck_gdk_pixbuf_get_from_pixmap(gdk_x11_screen_get_xscreen(gdk_screen_get_default()),xpixmap);
+#else
             pixmap = _wnck_gdk_pixbuf_get_from_pixmap(xpixmap, w, h);
+#endif
             result = ((pixmap != NULL) ? Success : -1);
         }
 
@@ -2221,7 +2299,11 @@ static GdkPixbuf * get_wm_icon(Window task_win, guint required_width, guint requ
                 &unused_win, &unused, &unused, &w, &h, &unused_2, &unused_2))
             {
                 /* Convert the X mask to a GDK pixmap. */
+#if GTK_CHECK_VERSION (3, 0, 0)
+				GdkPixbuf * mask = _wnck_gdk_pixbuf_get_from_pixmap(gdk_x11_screen_get_xscreen(gdk_screen_get_default()),xmask);
+#else
                 GdkPixbuf * mask = _wnck_gdk_pixbuf_get_from_pixmap(xmask, w, h);
+#endif
                 if (mask != NULL)
                 {
                     /* Apply the mask. */
diff --git a/plugins/netstat/netstat.c b/plugins/netstat/netstat.c
index f1fb809..717eebc 100644
--- a/plugins/netstat/netstat.c
+++ b/plugins/netstat/netstat.c
@@ -192,7 +192,9 @@ wireless_menu(netdev_info *ni)
 
             signal_quality = gtk_progress_bar_new();
             gtk_widget_set_size_request(signal_quality, 100, -1);
+#if !GTK_CHECK_VERSION (3, 0, 0)
             gtk_progress_bar_set_orientation(GTK_PROGRESS_BAR(signal_quality), GTK_PROGRESS_LEFT_TO_RIGHT);
+#endif
             gtk_progress_bar_set_fraction(GTK_PROGRESS_BAR(signal_quality), quality_per);
             gtk_box_pack_start(GTK_BOX(item_box), signal_quality, FALSE, FALSE, 0);
 
diff --git a/plugins/netstat/passwd_gui.c b/plugins/netstat/passwd_gui.c
index ad9b87b..54969dd 100644
--- a/plugins/netstat/passwd_gui.c
+++ b/plugins/netstat/passwd_gui.c
@@ -86,7 +86,11 @@ struct pgui *passwd_gui_new(ap_setting *aps)
     /* create dialog */
     pwdgui->dlg = gtk_dialog_new_with_buttons(_("Setting Encryption Key"),
                                        NULL,
+#if GTK_CHECK_VERSION (3, 0, 0)
+                                       0,
+#else
                                        GTK_DIALOG_NO_SEPARATOR,
+#endif
                                        GTK_STOCK_OK, GTK_RESPONSE_OK,
                                        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                        NULL );
diff --git a/plugins/netstatus/netstatus-dialog.c b/plugins/netstatus/netstatus-dialog.c
index b6f3c9f..e06acaa 100644
--- a/plugins/netstatus/netstatus-dialog.c
+++ b/plugins/netstatus/netstatus-dialog.c
@@ -228,14 +228,18 @@ netstatus_dialog_update_inet4_support (NetstatusDialogData *data)
       /* Address */
       if (addr)
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 0, 6);
+#endif
 	  gtk_label_set_text (GTK_LABEL (data->inet4_addr), addr);
 	  gtk_widget_show (data->inet4_addr);
 	  gtk_widget_show (data->inet4_addr_title);
 	}
       else
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 0, 0);
+#endif
 	  gtk_widget_hide (data->inet4_addr);
 	  gtk_widget_hide (data->inet4_addr_title);
 	}
@@ -243,14 +247,18 @@ netstatus_dialog_update_inet4_support (NetstatusDialogData *data)
       /* Destination */
       if (dest)
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 1, 6);
+#endif
 	  gtk_label_set_text (GTK_LABEL (data->inet4_dest), dest);
 	  gtk_widget_show (data->inet4_dest);
 	  gtk_widget_show (data->inet4_dest_title);
 	}
       else
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 1, 0);
+#endif
 	  gtk_widget_hide (data->inet4_dest);
 	  gtk_widget_hide (data->inet4_dest_title);
 	}
@@ -258,14 +266,18 @@ netstatus_dialog_update_inet4_support (NetstatusDialogData *data)
       /* Broadcast */
       if (bcast)
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 2, 6);
+#endif
 	  gtk_label_set_text (GTK_LABEL (data->inet4_bcast), bcast);
 	  gtk_widget_show (data->inet4_bcast);
 	  gtk_widget_show (data->inet4_bcast_title);
 	}
       else
 	{
+#if !GTK_CHECK_VERSION (3, 0, 0)
 	  gtk_table_set_row_spacing (GTK_TABLE (data->inet4_table), 2, 0);
+#endif
 	  gtk_widget_hide (data->inet4_bcast);
 	  gtk_widget_hide (data->inet4_bcast_title);
 	}
@@ -744,7 +756,15 @@ netstatus_dialog_new (NetstatusIface *iface)
   data = g_new0 (NetstatusDialogData, 1);
 
   data->builder = gtk_builder_new();
-  gtk_builder_add_from_file(data->builder, PACKAGE_UI_DIR "/netstatus.ui", NULL);
+#if GTK_CHECK_VERSION (3, 0, 0)
+  if ( !gtk_builder_add_from_file(data->builder, PACKAGE_UI_DIR "/netstatus3.ui", NULL) )
+#else
+  if ( !gtk_builder_add_from_file(data->builder, PACKAGE_UI_DIR "/netstatus.ui", NULL) )
+#endif
+  {
+      g_object_unref(data->builder);
+      return;
+  }
   data->dialog = (GtkWidget*)gtk_builder_get_object(data->builder, "network_status_dialog");
 
   g_object_set_data (G_OBJECT (data->dialog), "netstatus-dialog-data", data);
diff --git a/plugins/netstatus/netstatus-icon.c b/plugins/netstatus/netstatus-icon.c
index 7746779..de2205b 100644
--- a/plugins/netstatus/netstatus-icon.c
+++ b/plugins/netstatus/netstatus-icon.c
@@ -447,7 +447,11 @@ netstatus_icon_signal_changed (NetstatusIface *iface,
 }
 
 static void
+#if GTK_CHECK_VERSION (3, 0, 0)
+netstatus_icon_destroy (GtkWidget *widget)
+#else
 netstatus_icon_destroy (GtkObject *widget)
+#endif
 {
   NetstatusIcon *icon = (NetstatusIcon *) widget;
 
@@ -474,8 +478,11 @@ netstatus_icon_destroy (GtkObject *widget)
   icon->priv->signal_changed_id   = 0;
 
   icon->priv->image = NULL;
-
+#if GTK_CHECK_VERSION (3, 0, 0)
+  GTK_WIDGET_CLASS (parent_class)->destroy (widget);
+#else
   GTK_OBJECT_CLASS (parent_class)->destroy (widget);
+#endif
 }
 
 static GdkPixbuf *
@@ -581,6 +588,7 @@ get_box_class (GtkOrientation orientation)
   return g_type_class_peek(orientation == GTK_ORIENTATION_HORIZONTAL ? GTK_TYPE_HBOX : GTK_TYPE_VBOX);
 }
 
+#if !GTK_CHECK_VERSION (3, 0, 0)
 static void
 netstatus_icon_size_request (GtkWidget      *widget,
 			     GtkRequisition *requisition)
@@ -593,6 +601,7 @@ netstatus_icon_size_request (GtkWidget      *widget,
   if (GTK_WIDGET_CLASS (klass)->size_request)
     GTK_WIDGET_CLASS (klass)->size_request (widget, requisition);
 }
+#endif
 
 static void
 netstatus_icon_size_allocate (GtkWidget     *widget,
@@ -670,7 +679,9 @@ netstatus_icon_realize (GtkWidget *widget)
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.wclass = GDK_INPUT_OUTPUT;
   attributes.visual = gtk_widget_get_visual (widget);
+#if !GTK_CHECK_VERSION (3, 0, 0)
   attributes.colormap = gtk_widget_get_colormap (widget);
+#endif
   attributes.event_mask = gtk_widget_get_events (widget) |
                           GDK_BUTTON_MOTION_MASK         |
                           GDK_BUTTON_PRESS_MASK          |
@@ -678,9 +689,11 @@ netstatus_icon_realize (GtkWidget *widget)
                           GDK_EXPOSURE_MASK              |
                           GDK_ENTER_NOTIFY_MASK          |
                           GDK_LEAVE_NOTIFY_MASK;
-
+#if GTK_CHECK_VERSION (3, 0, 0)
+  attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
+#else
   attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
+#endif
   window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask);
   gtk_widget_set_window (widget, window);
   gdk_window_set_user_data (window, widget);
@@ -799,7 +812,9 @@ static void
 netstatus_icon_class_init (NetstatusIconClass *klass)
 {
   GObjectClass   *gobject_class   = (GObjectClass   *) klass;
+#if !GTK_CHECK_VERSION (3, 0, 0)
   GtkObjectClass *gtkobject_class = (GtkObjectClass *) klass;
+#endif
   GtkWidgetClass *widget_class    = (GtkWidgetClass *) klass;
 
   parent_class = g_type_class_peek_parent (klass);
@@ -810,10 +825,15 @@ netstatus_icon_class_init (NetstatusIconClass *klass)
   */
 
   gobject_class->finalize     = netstatus_icon_finalize;
+#if GTK_CHECK_VERSION (3, 0, 0)
+  widget_class->destroy = netstatus_icon_destroy;
 
+//  widget_class->size_request       = netstatus_icon_size_request;
+#else
   gtkobject_class->destroy = netstatus_icon_destroy;
 
   widget_class->size_request       = netstatus_icon_size_request;
+#endif
   widget_class->size_allocate      = netstatus_icon_size_allocate;
   widget_class->realize            = netstatus_icon_realize;
   widget_class->button_press_event = netstatus_icon_button_press_event;
diff --git a/plugins/netstatus/netstatus.c b/plugins/netstatus/netstatus.c
index 21e6216..a78c765 100644
--- a/plugins/netstatus/netstatus.c
+++ b/plugins/netstatus/netstatus.c
@@ -89,10 +89,10 @@ static gboolean on_button_press( GtkWidget* widget, GdkEventButton* evt, LXPanel
         {
             iface = netstatus_icon_get_iface( NETSTATUS_ICON(widget) );
             ns->dlg = netstatus_dialog_new(iface);
-
+#if !GTK_CHECK_VERSION (3,0,0)
             /* fix background */
             gtk_widget_set_style(ns->dlg, panel_get_defstyle(p));
-
+#endif
             netstatus_dialog_set_configuration_tool( ns->dlg, ns->config_tool );
             g_signal_connect( ns->dlg, "response", G_CALLBACK(on_response), ns );
         }
diff --git a/plugins/pager.c b/plugins/pager.c
index c5e9ed3..39be8e5 100644
--- a/plugins/pager.c
+++ b/plugins/pager.c
@@ -64,7 +64,11 @@ static GtkWidget *pager_constructor(LXPanel *panel, config_setting_t *settings)
     int border = 1; /* NOTE: old 'pager' used 2, WnckPager has 1, need 1 more */
 
     /* FIXME: use some global setting for border */
+#if GTK_CHECK_VERSION (3,0,0)
+	w = wnck_pager_new();
+#else
     w = wnck_pager_new(NULL);
+#endif
     g_return_val_if_fail(w != NULL, 0);
     p = gtk_alignment_new(0, 0, 1.0, 1.0);
 
diff --git a/plugins/tray.c b/plugins/tray.c
index ace9713..2a58e53 100644
--- a/plugins/tray.c
+++ b/plugins/tray.c
@@ -34,6 +34,10 @@
 #include "misc.h"
 #include "icon-grid.h"
 
+#if GTK_CHECK_VERSION (3,0,0)
+#include <gtk/gtkx.h>
+#endif
+
 /* Standards reference:  http://standards.freedesktop.org/systemtray-spec/ */
 
 /* Protocol constants. */
@@ -430,6 +434,9 @@ static void trayclient_request_dock(TrayPlugin * tr, XClientMessageEvent * xeven
     /* Add the socket to the icon grid. */
     gtk_container_add(GTK_CONTAINER(tr->plugin), tc->socket);
     gtk_widget_show(tc->socket);
+#if GTK_CHECK_VERSION (3, 0, 0)
+    gdk_window_set_composited (gtk_widget_get_window(tc->socket),TRUE);
+#endif
 
     /* Connect the socket to the plug.  This can only be done after the socket is realized. */
     gtk_socket_add_id(GTK_SOCKET(tc->socket), tc->window);
@@ -442,7 +449,6 @@ static void trayclient_request_dock(TrayPlugin * tr, XClientMessageEvent * xeven
         g_free(tc);
         return;
     }
-
     /* Link the client structure into the client list. */
     if (tc_pred == NULL)
     {
@@ -546,6 +552,88 @@ static void tray_unmanage_selection(TrayPlugin * tr)
     }
 }
 
+#if GTK_CHECK_VERSION (3, 0, 0)
+static void
+tray_set_visual_property (GtkWidget *invisible, GdkScreen* screen)
+{
+  GdkWindow  *window;
+  GdkDisplay *display;
+  Visual     *xvisual;
+  Atom        visual_atom;
+  gulong      data[1];
+
+  if (!invisible)
+    return;
+  window = gtk_widget_get_window (invisible);
+  if (!window)
+    return;
+
+  /* The visual property is a hint to the tray icons as to what visual they
+   * should use for their windows. If the X server has RGBA colormaps, then
+   * we tell the tray icons to use a RGBA colormap and we'll composite the
+   * icon onto its parents with real transparency. Otherwise, we just tell
+   * the icon to use our colormap, and we'll do some hacks with parent
+   * relative backgrounds to simulate transparency.
+   */
+
+  display = gtk_widget_get_display (invisible);
+  visual_atom = gdk_x11_get_xatom_by_name_for_display (display,
+                               "_NET_SYSTEM_TRAY_VISUAL");
+
+  if (gdk_screen_get_rgba_visual (screen) != NULL &&
+      gdk_display_supports_composite (display))
+    {
+      xvisual = GDK_VISUAL_XVISUAL (gdk_screen_get_rgba_visual (screen));
+    }
+  else
+    {
+      /* We actually want the visual of the tray where the icons will
+       * be embedded. In almost all cases, this will be the same as the visual
+       * of the screen.
+       */
+      xvisual = GDK_VISUAL_XVISUAL (gdk_screen_get_system_visual (screen));
+    }
+
+  data[0] = XVisualIDFromVisual (xvisual);
+
+  XChangeProperty (GDK_DISPLAY_XDISPLAY (display),
+                   GDK_WINDOW_XID (window),
+                   visual_atom,
+                   XA_VISUALID, 32,
+                   PropModeReplace,
+                   (guchar *) &data, 1);
+}
+
+static void
+tray_draw_icon (GtkWidget *widget, gpointer   data)
+{
+      cairo_t *cr = data;
+      GtkAllocation allocation;
+      GtkAllocation parent_alloc;
+
+      gtk_widget_get_allocation (widget, &allocation);
+      gtk_widget_get_allocation (gtk_widget_get_parent(widget), &parent_alloc);
+      cairo_save (cr);
+      gdk_cairo_set_source_window (cr,
+                                   gtk_widget_get_window (widget),
+                                   allocation.x-parent_alloc.x,
+                                   allocation.y-parent_alloc.y);
+      cairo_rectangle (cr, allocation.x-parent_alloc.x, allocation.y-parent_alloc.y, allocation.width, allocation.height);
+      cairo_clip (cr);
+      cairo_paint (cr);
+      cairo_restore (cr);
+}
+
+
+static void
+tray_draw_box (GtkWidget *box,
+                  cairo_t   *cr)
+{
+    gtk_container_foreach (GTK_CONTAINER (box), tray_draw_icon, cr);
+}
+
+#endif
+
 /* Plugin constructor. */
 static GtkWidget *tray_constructor(LXPanel *panel, config_setting_t *settings)
 {
@@ -573,7 +661,9 @@ static GtkWidget *tray_constructor(LXPanel *panel, config_setting_t *settings)
     GtkWidget * invisible = gtk_invisible_new_for_screen(screen);
     gtk_widget_realize(invisible);
     gtk_widget_add_events(invisible, GDK_PROPERTY_CHANGE_MASK | GDK_STRUCTURE_MASK);
-
+#if GTK_CHECK_VERSION (3, 0, 0)
+    tray_set_visual_property (invisible, screen);
+#endif
     /* Try to claim the _NET_SYSTEM_TRAY_Sn selection. */
     guint32 timestamp = gdk_x11_get_server_time(gtk_widget_get_window(invisible));
     if (gdk_selection_owner_set_for_display(
@@ -591,7 +681,11 @@ static GtkWidget *tray_constructor(LXPanel *panel, config_setting_t *settings)
         xev.format = 32;
         xev.data.l[0] = timestamp;
         xev.data.l[1] = selection_atom;
+#if GTK_CHECK_VERSION (3,0,0)
+		xev.data.l[2] = GDK_WINDOW_XID(gtk_widget_get_window(invisible));
+#else
         xev.data.l[2] = GDK_WINDOW_XWINDOW(gtk_widget_get_window(invisible));
+#endif
         xev.data.l[3] = 0;    /* manager specific data */
         xev.data.l[4] = 0;    /* manager specific data */
         XSendEvent(GDK_DISPLAY_XDISPLAY(display), RootWindowOfScreen(xscreen), False, StructureNotifyMask, (XEvent *) &xev);
@@ -601,7 +695,11 @@ static GtkWidget *tray_constructor(LXPanel *panel, config_setting_t *settings)
         gulong data = SYSTEM_TRAY_ORIENTATION_HORZ;
         XChangeProperty(
             GDK_DISPLAY_XDISPLAY(display),
+#if GTK_CHECK_VERSION (3,0,0)
+			GDK_WINDOW_XID(gtk_widget_get_window(invisible)),
+#else
             GDK_WINDOW_XWINDOW(gtk_widget_get_window(invisible)),
+#endif
             a_NET_SYSTEM_TRAY_ORIENTATION,
             XA_CARDINAL, 32,
             PropModeReplace,
@@ -622,13 +720,21 @@ static GtkWidget *tray_constructor(LXPanel *panel, config_setting_t *settings)
     gdk_window_add_filter(NULL, (GdkFilterFunc) tray_event_filter, tr);
     /* Reference the window since it is never added to a container. */
     tr->invisible = g_object_ref_sink(G_OBJECT(invisible));
+#if GTK_CHECK_VERSION (3,0,0)
+	tr->invisible_window = GDK_WINDOW_XID(gtk_widget_get_window(invisible));
+#else
     tr->invisible_window = GDK_WINDOW_XWINDOW(gtk_widget_get_window(invisible));
+#endif
 
     /* Allocate top level widget and set into Plugin widget pointer. */
     tr->plugin = p = panel_icon_grid_new(panel_get_orientation(panel),
                                          panel_get_icon_size(panel),
                                          panel_get_icon_size(panel),
                                          3, 0, panel_get_height(panel));
+#if GTK_CHECK_VERSION (3, 0, 0)
+    g_signal_connect (tr->plugin, "draw",
+                      G_CALLBACK (tray_draw_box), NULL);
+#endif
     lxpanel_plugin_set_data(p, tr, tray_destructor);
     gtk_widget_set_name(p, "tray");
     gtk_container_set_border_width(GTK_CONTAINER(p), 1);
diff --git a/plugins/xkb/xkb-plugin.c b/plugins/xkb/xkb-plugin.c
index 0219436..77ef67e 100644
--- a/plugins/xkb/xkb-plugin.c
+++ b/plugins/xkb/xkb-plugin.c
@@ -1203,7 +1203,11 @@ static GtkWidget *xkb_configure(LXPanel *panel, GtkWidget *p)
     GtkWidget * dlg = gtk_dialog_new_with_buttons(
         _("Keyboard Layout Handler"),
         NULL,
+#if GTK_CHECK_VERSION (3, 0, 0)
+        0,
+#else
         GTK_DIALOG_NO_SEPARATOR,
+#endif
         GTK_STOCK_CLOSE,
         GTK_RESPONSE_OK,
         NULL);
diff --git a/src/bg.c b/src/bg.c
index c9f0f0a..5a46bff 100644
--- a/src/bg.c
+++ b/src/bg.c
@@ -178,7 +178,116 @@ fb_bg_get_xrootpmap(FbBg *bg)
 
 }
 
+//TODO:Background
+#if GTK_CHECK_VERSION(3,0,0)
+void fb_bg_apply_css (GtkWidget* widget, gchar* css,gboolean remove)
+{
+	GtkStyleContext* context;
+	GtkCssProvider  *provider;
+
+	context = gtk_widget_get_style_context (widget);
+	gtk_widget_reset_style(widget);
+	if (remove) {
+		gtk_style_context_remove_class (context, "-lxpanel-background");
+		gtk_style_context_add_class (context, "background");
+	}
+	else
+	{
+		provider = gtk_css_provider_new ();
+		gtk_css_provider_load_from_data (provider, css,
+						-1, NULL);
+		gtk_style_context_remove_class (context, "background");
+		gtk_style_context_add_class (context, "-lxpanel-background");
+		gtk_style_context_add_provider (context,
+						GTK_STYLE_PROVIDER (provider),
+						GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+	}
+}
+
+gchar* fb_bg_generate_string(const char *filename, GdkRGBA color,gboolean no_image)
+{
+	gchar* returnie;
+	if (no_image) returnie = g_strdup_printf(".-lxpanel-background{\n"
+					" background-color: %s;\n"
+					" background-image: none;\n"
+					"}",gdk_rgba_to_string(&color));
+	else returnie = g_strdup_printf(".-lxpanel-background{\n"
+						 " background-color: %s;\n"
+						 " background-image: %s;\n"
+						 "}",gdk_rgba_to_string(&color),filename);
+	return returnie;
+}
 
+cairo_pattern_t *
+fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename)
+{
+	ENTER;
+	GdkPixbuf *pixbuf;
+	cairo_t *cr;
+	cairo_surface_t *surface;
+	cairo_pattern_t *pattern;
+
+	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+	if (!pixbuf) {
+		RET(NULL);
+	}
+	surface = gdk_window_create_similar_surface (gtk_widget_get_window(widget),
+							 CAIRO_CONTENT_COLOR_ALPHA,
+							 gdk_pixbuf_get_width(pixbuf), gdk_pixbuf_get_height(pixbuf));
+	cr = cairo_create(surface);
+	gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
+	cairo_paint(cr);
+	check_cairo_status(cr);
+	cairo_destroy(cr);
+
+	g_object_unref( pixbuf );
+	pattern = cairo_pattern_create_for_surface(surface);
+	cairo_pattern_set_extend(pattern,CAIRO_EXTEND_REPEAT);
+	cairo_surface_destroy(surface);
+	RET(pattern);
+}
+
+cairo_pattern_t *
+fb_bg_get_xroot_pix_for_win(FbBg *bg, GtkWidget *widget)
+{
+	Window win;
+	Window dummy;
+	Pixmap bgpix;
+	cairo_t *cr;
+	cairo_surface_t *surface;
+	cairo_pattern_t *pattern;
+	GdkScreen *screen = gdk_window_get_screen(gtk_widget_get_window(widget));
+	guint  width, height, border, depth;
+	int  x, y;
+
+	ENTER;
+	win = GDK_WINDOW_XID(gtk_widget_get_window(widget));
+	if (!XGetGeometry(bg->dpy, win, &dummy, &x, &y, &width, &height, &border,
+			  &depth)) {
+		g_warning("XGetGeometry failed\n");
+		RET(NULL);
+	}
+	XTranslateCoordinates(bg->dpy, win, bg->xroot, 0, 0, &x, &y, &dummy);
+	DBG("win=%x %dx%d%+d%+d\n", win, width, height, x, y);
+	bgpix=gdk_x11_window_get_xid(gtk_widget_get_window(widget));
+	surface = cairo_xlib_surface_create (GDK_SCREEN_XDISPLAY (screen), bgpix,
+										GDK_VISUAL_XVISUAL (gdk_screen_get_system_visual (screen)),
+							 width, height);
+//	gbgpix = gdk_pixmap_new(NULL, width, height, depth);
+//	if (!gbgpix) {
+//		g_critical("gdk_pixmap_new failed");
+//		RET(NULL);
+//	}
+//	bgpix =  gdk_x11_drawable_get_xid(gbgpix);
+//	XSetTSOrigin(bg->dpy, bg->gc, -x, -y) ;
+//	XFillRectangle(bg->dpy, bgpix, bg->gc, 0, 0, width, height);
+//	RET(gbgpix);
+	pattern = cairo_pattern_create_for_surface(surface);
+	cairo_surface_destroy(surface);
+	RET(pattern);
+}
+
+#else
 GdkPixmap *
 fb_bg_get_xroot_pix_for_win(FbBg *bg, GtkWidget *widget)
 {
@@ -209,8 +318,40 @@ fb_bg_get_xroot_pix_for_win(FbBg *bg, GtkWidget *widget)
     RET(gbgpix);
 }
 
+GdkPixmap *
+fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename)
+{
+	ENTER;
+	GdkPixbuf *pixbuf;
+	cairo_t *cr;
+	GdkPixmap *pixmap;
+
+	pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+	if (!pixbuf) {
+		GtkStyle *style = gtk_widget_get_style(widget);
+		if (style->bg_pixmap[0])
+			g_object_ref(style->bg_pixmap[0]);
+		RET(style->bg_pixmap[0]);
+	}
+	pixmap = gdk_pixmap_new(gtk_widget_get_window(widget), gdk_pixbuf_get_width(pixbuf),
+							gdk_pixbuf_get_height(pixbuf), -1);
+	cr = gdk_cairo_create(pixmap);
+	gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
+	cairo_paint(cr);
+	check_cairo_status(cr);
+	cairo_destroy(cr);
+
+	g_object_unref( pixbuf );
+	RET(pixmap);
+}
+#endif
+#if GTK_CHECK_VERSION (3,0,0)
+void
+fb_bg_composite(GdkWindow *base, GdkColor *tintcolor, gint alpha)
+#else
 void
 fb_bg_composite(GdkDrawable *base, GdkColor *tintcolor, gint alpha)
+#endif
 {
     cairo_t *cr;
     FbBg *bg;
@@ -263,30 +404,3 @@ FbBg *fb_bg_get_for_display(void)
         g_object_ref(default_bg);
     RET(default_bg);
 }
-
-GdkPixmap *
-fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename)
-{
-    ENTER;
-    GdkPixbuf *pixbuf;
-    cairo_t *cr;
-    GdkPixmap *pixmap;
-
-    pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
-    if (!pixbuf) {
-        GtkStyle *style = gtk_widget_get_style(widget);
-        if (style->bg_pixmap[0])
-            g_object_ref(style->bg_pixmap[0]);
-        RET(style->bg_pixmap[0]);
-    }
-    pixmap = gdk_pixmap_new(gtk_widget_get_window(widget), gdk_pixbuf_get_width(pixbuf),
-                            gdk_pixbuf_get_height(pixbuf), -1);
-    cr = gdk_cairo_create(pixmap);
-    gdk_cairo_set_source_pixbuf(cr, pixbuf, 0, 0);
-    cairo_paint(cr);
-    check_cairo_status(cr);
-    cairo_destroy(cr);
-
-    g_object_unref( pixbuf );
-    RET(pixmap);
-}
diff --git a/src/bg.h b/src/bg.h
index f1fd3fc..ceb2581 100644
--- a/src/bg.h
+++ b/src/bg.h
@@ -56,9 +56,17 @@ typedef struct _FbBg      FbBg;
 
 GType fb_bg_get_type       (void);
 #define fb_bg_new() (FbBg *)g_object_new(FB_TYPE_BG, NULL)
+#if GTK_CHECK_VERSION (3,0,0)
+void fb_bg_apply_css (GtkWidget* widget, gchar* css,gboolean remove);
+gchar* fb_bg_generate_string(const char *filename, GdkRGBA color,gboolean no_image);
+void fb_bg_composite(GdkWindow *base, GdkColor *tintcolor, gint alpha);
+cairo_pattern_t *fb_bg_get_xroot_pix_for_win(FbBg *bg, GtkWidget *widget);
+cairo_pattern_t *fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename);
+#else
 void fb_bg_composite(GdkDrawable *base, GdkColor *tintcolor, gint alpha);
 GdkPixmap *fb_bg_get_xroot_pix_for_win(FbBg *bg, GtkWidget *widget);
+GdkPixmap *fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename);
+#endif
 void fb_bg_notify_changed_bg(FbBg *bg);
 FbBg *fb_bg_get_for_display(void);
-GdkPixmap *fb_bg_get_pix_from_file(GtkWidget *widget, const char *filename);
 #endif /* __FB_BG_H__ */
diff --git a/src/gtk-run.c b/src/gtk-run.c
index dc225c9..ae516f5 100644
--- a/src/gtk-run.c
+++ b/src/gtk-run.c
@@ -376,7 +376,11 @@ void gtk_run()
     {
         win = gtk_dialog_new_with_buttons( _("Run"),
                                            NULL,
+#if GTK_CHECK_VERSION(3,0,0)
+										   0,
+#else
                                            GTK_DIALOG_NO_SEPARATOR,
+#endif
                                            GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
                                            GTK_STOCK_OK, GTK_RESPONSE_OK,
                                            NULL );
diff --git a/src/icon-grid-old.c b/src/icon-grid-old.c
index 2e3d7b4..3bd2f81 100644
--- a/src/icon-grid-old.c
+++ b/src/icon-grid-old.c
@@ -17,6 +17,9 @@
  */
 
 #include <gtk/gtk.h>
+#if GTK_CHECK_VERSION (3,0,0)
+#include <gtk/gtkx.h>
+#endif
 #include <string.h>
 
 #include "icon-grid-old.h"
diff --git a/src/icon-grid.c b/src/icon-grid.c
index 4d4d780..c9d751b 100644
--- a/src/icon-grid.c
+++ b/src/icon-grid.c
@@ -73,8 +73,8 @@ static void panel_icon_grid_size_allocate(GtkWidget *widget,
     GList *ige;
     GtkWidget *child;
 
-    /* Apply given allocation */
-    gtk_widget_set_allocation(widget, allocation);
+	/* Apply given allocation */
+	gtk_widget_set_allocation(widget, allocation);
     border = gtk_container_get_border_width(GTK_CONTAINER(widget));
 #if GTK_CHECK_VERSION(2, 20, 0)
     if (gtk_widget_get_realized(widget))
@@ -109,10 +109,11 @@ static void panel_icon_grid_size_allocate(GtkWidget *widget,
     }
 
     /* Get and save the desired container geometry. */
-    if (ig->orientation == GTK_ORIENTATION_HORIZONTAL && allocation->height > 1)
-        ig->target_dimension = allocation->height;
-    else if (ig->orientation == GTK_ORIENTATION_VERTICAL && allocation->width > 1)
-        ig->target_dimension = allocation->width;
+
+	if (ig->orientation == GTK_ORIENTATION_HORIZONTAL && allocation->height > 1)
+		ig->target_dimension = allocation->height;
+	else if (ig->orientation == GTK_ORIENTATION_VERTICAL && allocation->width > 1)
+		ig->target_dimension = allocation->width;
     child_width = ig->child_width;
     child_height = ig->child_height;
 
@@ -152,7 +153,11 @@ static void panel_icon_grid_size_allocate(GtkWidget *widget,
         if (gtk_widget_get_visible(child))
         {
             /* Do necessary operations on the child. */
+#if GTK_CHECK_VERSION (3, 0, 0)
+			gtk_widget_get_preferred_size(child, &req, NULL);
+#else
             gtk_widget_size_request(child, &req);
+#endif
             child_allocation.x = x;
             child_allocation.y = y;
             child_allocation.width = child_width;
@@ -192,6 +197,32 @@ static void panel_icon_grid_size_allocate(GtkWidget *widget,
     }
 }
 
+#if GTK_CHECK_VERSION (3,0,0)
+static void
+panel_icon_grid_get_preferred_width (GtkWidget *widget,
+							   gint      *minimal_width,
+							   gint      *natural_width)
+{
+  GtkRequisition requisition;
+
+  panel_icon_grid_size_request (widget, &requisition);
+
+  *minimal_width = *natural_width = requisition.width;
+}
+
+static void
+panel_icon_grid_get_preferred_height (GtkWidget *widget,
+								gint      *minimal_height,
+								gint      *natural_height)
+{
+  GtkRequisition requisition;
+
+  panel_icon_grid_size_request (widget, &requisition);
+
+  *minimal_height = *natural_height = requisition.height;
+}
+#endif
+
 /* Establish the geometry of an icon grid. */
 static void panel_icon_grid_size_request(GtkWidget *widget,
                                          GtkRequisition *requisition)
@@ -219,8 +250,8 @@ static void panel_icon_grid_size_request(GtkWidget *widget,
         if (ig->rows == 0)
             ig->rows = 1;
         ig->columns = (visible_children + (ig->rows - 1)) / ig->rows;
-        /* if ((ig->columns == 1) && (ig->rows > visible_children))
-            ig->rows = visible_children; */
+		 if ((ig->columns == 1) && (ig->rows > visible_children))
+			ig->rows = visible_children;
     }
     else
     {
@@ -251,11 +282,12 @@ static void panel_icon_grid_size_request(GtkWidget *widget,
         requisition->width = ig->child_width * ig->columns + column_spaces * ig->spacing + 2 * border;
         requisition->height = ig->child_height * ig->rows + row_spaces * ig->spacing + 2 * border;
     }
-    if (ig->rows != old_rows || ig->columns != old_columns)
-        gtk_widget_queue_resize(widget);
+	if (ig->rows != old_rows || ig->columns != old_columns)
+		gtk_widget_queue_resize(widget);
 }
 
 /* Handler for "size-request" event on the icon grid element. */
+#if !GTK_CHECK_VERSION (3,0,0)
 static void icon_grid_element_size_request(GtkWidget * widget, GtkRequisition * requisition, PanelIconGrid * ig)
 {
     /* This is our opportunity to request space for the element. */
@@ -265,6 +297,18 @@ static void icon_grid_element_size_request(GtkWidget * widget, GtkRequisition *
         requisition->width = ig->constrained_child_width;
     requisition->height = ig->child_height;
 }
+#endif
+#if GTK_CHECK_VERSION (3,0,0)
+static void icon_grid_element_get_preferred_width(GtkWidget * widget,gint* minimal_width, gint* natural_width, PanelIconGrid * ig){
+	*minimal_width = ig->child_width;
+	if ((ig->constrain_width) && (ig->constrained_child_width > 1))
+		*minimal_width = ig->constrained_child_width;
+	*natural_width=*minimal_width;
+}
+static void icon_grid_element_get_preferred_height(GtkWidget * widget,gint* minimal_height, gint* natural_height, PanelIconGrid * ig){
+	*natural_height=*minimal_height = ig->child_height;
+}
+#endif
 
 /* Add an icon grid element and establish its initial visibility. */
 static void panel_icon_grid_add(GtkContainer *container, GtkWidget *widget)
@@ -275,10 +319,17 @@ static void panel_icon_grid_add(GtkContainer *container, GtkWidget *widget)
     ig->children = g_list_append(ig->children, widget);
 
     /* Add the widget to the layout container. */
+#if GTK_CHECK_VERSION (3, 0, 0)
+	gint height,width,dummy;
+	icon_grid_element_get_preferred_height(widget,&height,&dummy,ig);
+	icon_grid_element_get_preferred_width(widget,&width,&dummy,ig);
+	gtk_widget_set_size_request(widget,width,height);
+#else
     g_signal_connect(G_OBJECT(widget), "size-request",
                      G_CALLBACK(icon_grid_element_size_request), container);
+#endif
     gtk_widget_set_parent(widget, GTK_WIDGET(container));
-//    gtk_widget_queue_resize(GTK_WIDGET(container));
+	gtk_widget_queue_resize(GTK_WIDGET(container));
 }
 
 void panel_icon_grid_set_constrain_width(PanelIconGrid * ig, gboolean constrain_width)
@@ -319,9 +370,11 @@ static void panel_icon_grid_remove(GtkContainer *container, GtkWidget *widget)
             gboolean was_visible = gtk_widget_get_visible(widget);
 
             /* The child is found.  Remove from child list and layout container. */
+#if !GTK_CHECK_VERSION (3,0,0)
             g_signal_handlers_disconnect_by_func(widget,
                                                  icon_grid_element_size_request,
                                                  container);
+#endif
             gtk_widget_unparent (widget);
             ig->children = g_list_remove_link(ig->children, children);
             g_list_free(children);
@@ -507,11 +560,14 @@ static void panel_icon_grid_realize(GtkWidget *widget)
     if (visible_window)
     {
         attributes.visual = gtk_widget_get_visual(widget);
+#if GTK_CHECK_VERSION (3,0,0)
+		attributes.wclass = GDK_INPUT_OUTPUT;
+		attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL;
+#else
         attributes.colormap = gtk_widget_get_colormap(widget);
         attributes.wclass = GDK_INPUT_OUTPUT;
-
-        attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
-
+		attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP;
+#endif
         window = gdk_window_new(gtk_widget_get_parent_window(widget),
                                 &attributes, attributes_mask);
         gtk_widget_set_window(widget, window);
@@ -569,6 +625,16 @@ static void panel_icon_grid_unmap(GtkWidget *widget)
     GTK_WIDGET_CLASS(panel_icon_grid_parent_class)->unmap(widget);
 }
 
+#if GTK_CHECK_VERSION (3,0,0)
+static gboolean panel_icon_grid_draw(GtkWidget *widget, cairo_t *cr)
+{
+    if (gtk_widget_is_drawable(widget))
+    {
+        GTK_WIDGET_CLASS(panel_icon_grid_parent_class)->draw(widget, cr);
+    }
+    return FALSE;
+}
+#else
 static gboolean panel_icon_grid_expose(GtkWidget *widget, GdkEventExpose *event)
 {
     if (gtk_widget_is_drawable(widget))
@@ -585,6 +651,7 @@ static gboolean panel_icon_grid_expose(GtkWidget *widget, GdkEventExpose *event)
     }
     return FALSE;
 }
+#endif
 
 static void panel_icon_grid_forall(GtkContainer *container,
                                    gboolean      include_internals,
@@ -608,22 +675,27 @@ static GType panel_icon_grid_child_type(GtkContainer *container)
     return GTK_TYPE_WIDGET;
 }
 
-static void panel_icon_grid_class_init(PanelIconGridClass *class)
+static void panel_icon_grid_class_init(PanelIconGridClass *klass)
 {
-    GObjectClass *object_class = G_OBJECT_CLASS(class);
-    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(class);
-    GtkContainerClass *container_class = GTK_CONTAINER_CLASS(class);
+    GObjectClass *object_class = G_OBJECT_CLASS(klass);
+    GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
+    GtkContainerClass *container_class = GTK_CONTAINER_CLASS(klass);
 
     object_class->set_property = panel_icon_grid_set_property;
     object_class->get_property = panel_icon_grid_get_property;
 
-    widget_class->size_request = panel_icon_grid_size_request;
     widget_class->size_allocate = panel_icon_grid_size_allocate;
     widget_class->realize = panel_icon_grid_realize;
     widget_class->unrealize = panel_icon_grid_unrealize;
     widget_class->map = panel_icon_grid_map;
     widget_class->unmap = panel_icon_grid_unmap;
+#if GTK_CHECK_VERSION (3,0,0)
+	widget_class->get_preferred_width = panel_icon_grid_get_preferred_width;
+	widget_class->get_preferred_height = panel_icon_grid_get_preferred_height;
+#else
+	widget_class->size_request = panel_icon_grid_size_request;
     widget_class->expose_event = panel_icon_grid_expose;
+#endif
 
     container_class->add = panel_icon_grid_add;
     container_class->remove = panel_icon_grid_remove;
diff --git a/src/misc.c b/src/misc.c
index f15961b..03b27f6 100644
--- a/src/misc.c
+++ b/src/misc.c
@@ -1030,7 +1030,9 @@ void
 get_button_spacing(GtkRequisition *req, GtkContainer *parent, gchar *name)
 {
     GtkWidget *b;
-
+#if GTK_CHECK_VERSION (3,0,0)
+	GtkRequisition* minimal;
+#endif
     ENTER;
     b = gtk_button_new();
     gtk_widget_set_name(GTK_WIDGET(b), name);
@@ -1042,7 +1044,11 @@ get_button_spacing(GtkRequisition *req, GtkContainer *parent, gchar *name)
         gtk_container_add(parent, b);
 
     gtk_widget_show(b);
+#if GTK_CHECK_VERSION (3, 0, 0)
+	gtk_widget_get_preferred_size(b, req, minimal);
+#else
     gtk_widget_size_request(b, req);
+#endif
 
     gtk_widget_destroy(b);
     RET();
diff --git a/src/panel.c b/src/panel.c
index d5171e6..5d6f573 100644
--- a/src/panel.c
+++ b/src/panel.c
@@ -83,7 +83,11 @@ static void lxpanel_finalize(GObject *object)
     G_OBJECT_CLASS(lxpanel_parent_class)->finalize(object);
 }
 
+#if GTK_CHECK_VERSION(3,0,0)
+static void lxpanel_destroy(GtkWidget *object)
+#else
 static void lxpanel_destroy(GtkObject *object)
+#endif
 {
     LXPanel *self = LXPANEL(object);
     Panel *p = self->priv;
@@ -122,8 +126,11 @@ static void lxpanel_destroy(GtkObject *object)
         g_source_remove(p->background_update_queued);
         p->background_update_queued = 0;
     }
-
+#if GTK_CHECK_VERSION(3,0,0)
+	GTK_WIDGET_CLASS(lxpanel_parent_class)->destroy(object);
+#else
     GTK_OBJECT_CLASS(lxpanel_parent_class)->destroy(object);
+#endif
 }
 
 static gboolean idle_update_background(gpointer p)
@@ -175,13 +182,22 @@ static void lxpanel_style_set(GtkWidget *widget, GtkStyle* prev)
 static void lxpanel_size_request(GtkWidget *widget, GtkRequisition *req)
 {
     Panel *p = LXPANEL(widget)->priv;
-
+#if GTK_CHECK_VERSION(3,0,0)
+		GTK_WIDGET_CLASS(lxpanel_parent_class)->get_preferred_height(widget, &req->height,&req->height);
+		GTK_WIDGET_CLASS(lxpanel_parent_class)->get_preferred_width(widget, &req->width,&req->width);
+		req->height=p->ah;
+		req->width=p->aw;
+#else
     GTK_WIDGET_CLASS(lxpanel_parent_class)->size_request(widget, req);
-
+#endif
     if (!p->visible)
         /* When the panel is in invisible state, the content box also got hidden, thus always
          * report 0 size.  Ask the content box instead for its size. */
+#if GTK_CHECK_VERSION (3, 0, 0)
+		gtk_widget_get_preferred_size(p->box, req, NULL);
+#else
         gtk_widget_size_request(p->box, req);
+#endif
 
     /* FIXME: is this ever required? */
     if (p->widthtype == WIDTH_REQUEST)
@@ -189,7 +205,6 @@ static void lxpanel_size_request(GtkWidget *widget, GtkRequisition *req)
     if (p->heighttype == HEIGHT_REQUEST)
         p->height = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? req->height : req->width;
     calculate_position(p);
-
     gtk_widget_set_size_request( widget, p->aw, p->ah );
 }
 
@@ -197,20 +212,22 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
 {
     Panel *p = LXPANEL(widget)->priv;
 
-    GTK_WIDGET_CLASS(lxpanel_parent_class)->size_allocate(widget, a);
-
+	GTK_WIDGET_CLASS(lxpanel_parent_class)->size_allocate(widget, a);
+#if GTK_CHECK_VERSION (3, 0, 0)
+	gtk_widget_set_allocation(widget,a);
+#endif
     if (p->widthtype == WIDTH_REQUEST)
         p->width = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? a->width : a->height;
     if (p->heighttype == HEIGHT_REQUEST)
         p->height = (p->orientation == GTK_ORIENTATION_HORIZONTAL) ? a->height : a->width;
     calculate_position(p);
-
-    if (a->width != p->aw || a->height != p->ah || a->x != p->ax || a->y != p->ay)
+	if (a->width != p->aw || a->height != p->ah || a->x != p->ax || a->y != p->ay)
     {
         gtk_window_move(GTK_WINDOW(widget), p->ax, p->ay);
         _panel_set_wm_strut(LXPANEL(widget));
     }
-    else if (p->background_update_queued)
+	else
+		if (p->background_update_queued)
     {
         g_source_remove(p->background_update_queued);
         p->background_update_queued = 0;
@@ -223,6 +240,30 @@ static void lxpanel_size_allocate(GtkWidget *widget, GtkAllocation *a)
     }
 }
 
+#if GTK_CHECK_VERSION (3,0,0)
+static void
+lxpanel_get_preferred_width (GtkWidget *widget,
+							   gint      *minimal_width,
+							   gint      *natural_width)
+{
+  GtkRequisition requisition;
+  lxpanel_size_request (widget, &requisition);
+
+  *minimal_width = *natural_width = requisition.width;
+}
+
+static void
+lxpanel_get_preferred_height (GtkWidget *widget,
+								gint      *minimal_height,
+								gint      *natural_height)
+{
+  GtkRequisition requisition;
+  lxpanel_size_request (widget, &requisition);
+
+  *minimal_height = *natural_height = requisition.height;
+}
+#endif
+
 static gboolean lxpanel_configure_event (GtkWidget *widget, GdkEventConfigure *e)
 {
     Panel *p = LXPANEL(widget)->priv;
@@ -264,13 +305,24 @@ static gboolean lxpanel_button_press(GtkWidget *widget, GdkEventButton *event)
 static void lxpanel_class_init(PanelToplevelClass *klass)
 {
     GObjectClass *gobject_class = (GObjectClass *)klass;
+#if !GTK_CHECK_VERSION(3,0,0)
     GtkObjectClass *gtk_object_class = (GtkObjectClass *)klass;
+#endif
     GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
 
     gobject_class->finalize = lxpanel_finalize;
+#if GTK_CHECK_VERSION (3,0,0)
+	widget_class->destroy = lxpanel_destroy;
+#else
     gtk_object_class->destroy = lxpanel_destroy;
+#endif
     widget_class->realize = lxpanel_realize;
+#if GTK_CHECK_VERSION (3,0,0)
+	widget_class->get_preferred_width = lxpanel_get_preferred_width;
+	widget_class->get_preferred_height = lxpanel_get_preferred_height;
+#else
     widget_class->size_request = lxpanel_size_request;
+#endif
     widget_class->size_allocate = lxpanel_size_allocate;
     widget_class->configure_event = lxpanel_configure_event;
     widget_class->style_set = lxpanel_style_set;
@@ -311,6 +363,11 @@ static void lxpanel_init(PanelToplevel *self)
     p->config = config_new();
     p->defstyle = gtk_widget_get_default_style();
     gtk_window_set_type_hint(GTK_WINDOW(self), GDK_WINDOW_TYPE_HINT_DOCK);
+#if GTK_CHECK_VERSION (3, 0, 0)
+	GdkScreen *screen = gtk_widget_get_screen(GTK_WIDGET(self));
+	GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+	gtk_widget_set_visual(GTK_WIDGET(self), visual);
+#endif
 }
 
 /* Allocate and initialize new Panel structure. */
@@ -595,9 +652,46 @@ void panel_determine_background_pixmap(Panel * panel, GtkWidget * widget, GdkWin
     _panel_determine_background_pixmap(panel->topgwin, widget);
 }
 
+#if GTK_CHECK_VERSION (3,0,0)
+void _panel_determine_background_css(LXPanel * panel, GtkWidget * widget)
+{
+	Panel * p = panel->priv;
+	gchar* css;
+	GdkRGBA color;
+	gboolean system;
+	if (( ! p->transparent) && (p->bg != NULL))
+	{
+		g_signal_handlers_disconnect_by_func(G_OBJECT(p->bg), on_root_bg_changed, panel);
+		g_object_unref(p->bg);
+		p->bg = NULL;
+	}
+	if (p->background)
+	{
+		/* User specified background pixmap. */
+		if (p->background_file != NULL)
+			css = fb_bg_generate_string(p->background_file,color,FALSE);
+	}
+	else if (p->transparent)
+	{
+		/* User specified background color. */
+		color.red=p->gtintcolor.red/255.0;
+		color.green=p->gtintcolor.green/255.0;
+		color.blue=p->gtintcolor.blue/255.0;
+		color.alpha=p->alpha/255.0;
+		css = fb_bg_generate_string(p->background_file,color,FALSE);
+	} else system=1;
+	g_print("CSS:%s",css);
+	fb_bg_apply_css(widget,css,system);
+	g_free(css);
+}
+#endif
 void _panel_determine_background_pixmap(LXPanel * panel, GtkWidget * widget)
 {
+#if GTK_CHECK_VERSION (3,0,0)
+	cairo_pattern_t* pixmap = NULL;
+#else
     GdkPixmap * pixmap = NULL;
+#endif
     GdkWindow * window = gtk_widget_get_window(widget);
     Panel * p = panel->priv;
 
@@ -623,22 +717,37 @@ void _panel_determine_background_pixmap(LXPanel * panel, GtkWidget * widget)
         {
             p->bg = fb_bg_get_for_display();
             g_signal_connect(G_OBJECT(p->bg), "changed", G_CALLBACK(on_root_bg_changed), panel);
-        }
+		}
+#if GTK_CHECK_VERSION (3,0,0)
+		GdkRGBA rgba;
+		rgba.red=p->gtintcolor.red/255.0;
+		rgba.green=p->gtintcolor.green/255.0;
+		rgba.blue=p->gtintcolor.blue/255.0;
+		rgba.alpha=p->alpha/255.0;
+		gtk_widget_set_app_paintable(widget, TRUE);
+		gdk_window_set_background_rgba(gtk_widget_get_window(widget),&rgba);
+		return;
+#else
         pixmap = fb_bg_get_xroot_pix_for_win(p->bg, widget);
         if ((pixmap != NULL) && (pixmap != GDK_NO_BG) && (p->alpha != 0))
             fb_bg_composite(pixmap, &p->gtintcolor, p->alpha);
+#endif
     }
 
     if (pixmap != NULL)
     {
         gtk_widget_set_app_paintable(widget, TRUE );
-        gdk_window_set_back_pixmap(window, pixmap, FALSE);
-        g_object_unref(pixmap);
+#if GTK_CHECK_VERSION (3,0,0)
+		gdk_window_set_background_pattern(window,pixmap);
+		cairo_pattern_destroy(pixmap);
+#else
+		gdk_window_set_back_pixmap(window, pixmap, FALSE);
+		g_object_unref(pixmap);
+#endif
     }
     else
         gtk_widget_set_app_paintable(widget, FALSE);
 }
-
 /* Update the background of the entire panel.
  * This function should only be called after the panel has been realized. */
 void panel_update_background(Panel * p)
@@ -652,8 +761,10 @@ static void _panel_update_background(LXPanel * p)
     GList *plugins, *l;
 
     /* Redraw the top level widget. */
-    _panel_determine_background_pixmap(p, w);
+	_panel_determine_background_pixmap(p, w);
+#if !GTK_CHECK_VERSION (3,0,0)
     gdk_window_clear(gtk_widget_get_window(w));
+#endif
     gtk_widget_queue_draw(w);
 
     /* Loop over all plugins redrawing each plugin. */
@@ -1286,8 +1397,11 @@ panel_start_gui(LXPanel *panel)
     gtk_widget_show(p->box);
     if (p->round_corners)
         make_round_corners(p);
-
+#if GTK_CHECK_VERSION (3,0,0)
+	p->topxwin = GDK_WINDOW_XID(gtk_widget_get_window(w));
+#else
     p->topxwin = GDK_WINDOW_XWINDOW(gtk_widget_get_window(w));
+#endif
     DBG("topxwin = %x\n", p->topxwin);
 
     /* the settings that should be done before window is mapped */
diff --git a/src/plugin.c b/src/plugin.c
index 668c26e..896373b 100644
--- a/src/plugin.c
+++ b/src/plugin.c
@@ -35,6 +35,10 @@
 #include <glib/gi18n.h>
 #include <libfm/fm-gtk.h>
 
+#if GTK_CHECK_VERSION (3,0,0)
+#include <gtk/gtkx.h>
+#endif
+
 //#define DEBUG
 #include "dbg.h"
 
@@ -224,10 +228,29 @@ static void plugin_get_available_classes(void)
     }
 #endif
 }
-
+//TODO:Background
 /* Recursively set the background of all widgets on a panel background configuration change. */
 void plugin_widget_set_background(GtkWidget * w, LXPanel * panel)
 {
+#if GTK_CHECK_VERSION (3, 0, 0)
+    if (w != NULL)
+    {
+        Panel *p = panel->priv;
+        if (gtk_widget_get_has_window(w))
+        {
+
+             if (gtk_widget_get_realized(w))
+             {
+                    GdkWindow * window = gtk_widget_get_window(w);
+                    GdkRGBA color;
+                    gdk_rgba_parse(&color,"rgba(0,0,0,0)");
+                    gdk_window_set_background_rgba(window, &color);
+                    gdk_window_set_background_pattern(window, NULL);
+                    gdk_window_invalidate_rect(gtk_widget_get_window(w), NULL, TRUE);
+             }
+         }
+    }
+#else
     if (w != NULL)
     {
         Panel *p = panel->priv;
@@ -254,7 +277,7 @@ void plugin_widget_set_background(GtkWidget * w, LXPanel * panel)
 #else
                 if (GTK_WIDGET_REALIZED(w))
 #endif
-                {
+				{
                     gdk_window_set_back_pixmap(gtk_widget_get_window(w), NULL, TRUE);
                     gtk_style_set_background(gtk_widget_get_style(w),
                                              gtk_widget_get_window(w),
@@ -276,8 +299,8 @@ void plugin_widget_set_background(GtkWidget * w, LXPanel * panel)
         if (GTK_IS_CONTAINER(w))
             gtk_container_foreach(GTK_CONTAINER(w), (GtkCallback) plugin_widget_set_background, panel);
     }
+#endif
 }
-
 /* Handler for "button_press_event" signal with Plugin as parameter.
  * External so can be used from a plugin. */
 static gboolean lxpanel_plugin_button_press_event(GtkWidget *plugin, GdkEventButton *event, LXPanel *panel)
@@ -534,8 +557,8 @@ static void on_size_allocate(GtkWidget *widget, GdkRectangle *allocation, LXPane
     if (alloc->x == allocation->x && alloc->y == allocation->y &&
         alloc->width == allocation->width && alloc->height == allocation->height)
         return; /* not changed */
-    *alloc = *allocation;
-    /* g_debug("size-allocate on %s", PLUGIN_CLASS(widget)->name); */
+	*alloc = *allocation;
+	 /* g_debug("size-allocate on %s, params: %d,%d\n", PLUGIN_CLASS(widget)->name,allocation->width,allocation->height); */
     _panel_queue_update_background(p);
 //    _queue_panel_calculate_size(p);
 }
------------------------------------------------------------------------------
_______________________________________________
Lxde-list mailing list
Lxde-list@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/lxde-list

Reply via email to